紀錄一下別人踩的坑。

同學在用 C++ 的 thread 時,一直編譯不過,

最後發現是 thread 傳入的 function poiter 的 member 的緣故。

和一般的 function pointer ,

member function pointer 要再傳 this pointer 進去

( 因為 thread 才會知道要拿哪個物件執行 function  )

所以要這樣傳:

animal :: walk(){ this->pos++; }

...

animal(){

  thread(&animal::walk , this);

}

...

其實啊,稍微有一點物件導向的常識應該都會知道,member function 其實都只是個 pointer,

在許多物件導向語言都把 this 的傳入省略掉了,

他的原型應該是 animal_inst.walk(animal_inst);  要把物件本身傳進去。

感覺已經不會寫 cpp 了。。

應該要找時間把那篇醜醜的 C 聊天室,改成物件導向風格了,

因為一堆 global 好醜。。

ref : so.

創作者介紹
創作者 nobodyzxc 的頭像
nobodyzxc

Nobody's Zero

nobodyzxc 發表在 痞客邦 留言(0) 人氣()