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的錯誤?
這工作,謝謝。任何想法爲什麼gcc 4.9.1接受它沒有&符號?這與標準中的任何變化有關嗎? – galinette
@galinette它不應該工作,它也不會在GCC 4.9.1工作[這裏](http://melpon.org/wandbox/permlink/J3LAPxodlucIiEyE)。 –
的MinGW-W64的錯誤呢?這很奇怪,因爲它是一個不應該影響解析器的gcc端口。謎然後... – galinette