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端口,不应该影响解析器。“那么,先生……”加里内特当然,这是可能的