C++ 成员函数的传递指针在MinGW-w64中编译,但不在gcc中编译

C++ 成员函数的传递指针在MinGW-w64中编译,但不在gcc中编译,c++,gcc,member-function-pointers,C++,Gcc,Member Function Pointers,我有一个带有run()非静态成员函数的Worker对象 已创建一个对象: Worker * worker = new Worker(); 做: std::thread(Worker::run, worker); 在MinGW-w64(gcc 4.9.1)下编译(一个有效),但在Ubuntu的linux(gcc 5.2.1)下,我得到编译错误: Invalid use of non-static member function 代码是用-std=gnu++11 我知道在MinGW的例子中,指

我有一个带有
run()
非静态成员函数的
Worker
对象

已创建一个对象:

Worker * worker = new Worker();
做:

std::thread(Worker::run, worker);
在MinGW-w64(gcc 4.9.1)下编译(一个有效),但在Ubuntu的linux(gcc 5.2.1)下,我得到编译错误:

Invalid use of non-static member function
代码是用
-std=gnu++11

我知道在MinGW的例子中,指向成员函数的指针有一个带有
Worker*这个
参数的签名,允许像静态函数指针一样使用它。为什么linux 5.2.1 gcc中禁止这样做,我应该如何编写

编辑:我可以使用lambda或通过在
Worker::run
之前添加
&
来解决这个问题,但为什么不同的gcc版本接受或不接受这个问题仍然存在。这是MinGW还是gcc4.9.1错误?

您需要使用

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

这很有效,谢谢。知道gcc 4.9.1为什么不使用符号就接受它吗?这与标准中的任何更改有关吗?@galinette它不应该工作,而且它在GCC 4.9.1.MinGW-w64 bug上也不工作?这很奇怪,因为它是一个gcc端口,不应该影响解析器。“那么,先生……”加里内特当然,这是可能的