2015-10-28 56 views
2

我有一個run()非靜態成員函數Worker對象。通行證成員函數指針在編譯MinGW的-W64,但不是在GCC

對象已創建:

Worker * worker = new Worker(); 

這樣做:

std::thread(Worker::run, worker); 

編譯(的作品)下的MinGW-W64(GCC 4.9.1),但linux下(GCC 5.2.1)從Ubuntu的,我得到的編譯錯誤:

Invalid use of non-static member function 

的代碼被編譯-std=gnu++11

據我所知,在MinGW的情況下,指針成員函數有一種Worker * this參數的簽名,允許使用它像一個靜態函數指針。這是爲什麼禁止在Linux 5.2.1的gcc,我應該怎麼寫呢?

編輯:我可以解決這個使用Lambda或Worker::run前加入&,但爲什麼它是由各種版本的GCC接受與否的問題依然存在。這是MinGW還是gcc 4.9.1的錯誤?

回答

3

您需要使用

std::thread(&Worker::run, worker); 

live example

+0

這工作,謝謝。任何想法爲什麼gcc 4.9.1接受它沒有&符號?這與標準中的任何變化有關嗎? – galinette

+0

@galinette它不應該工作,它也不會在GCC 4.9.1工作[這裏](http://melpon.org/wandbox/permlink/J3LAPxodlucIiEyE)。 –

+0

的MinGW-W64的錯誤呢?這很奇怪,因爲它是一個不應該影響解析器的gcc端口。謎然後... – galinette