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

时间:2015-10-28 09:35:45

标签: c++ gcc member-function-pointers

我有一个Worker对象,其中包含run()非静态成员函数。

已创建对象:

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 * this参数的签名,允许像静态函数指针一样使用它。为什么在linux 5.2.1 gcc中禁止这样做,我应该怎么写呢?

编辑:我可以使用lambda或在&之前添加Worker::run来解决此问题,但是为什么它被各种gcc版本接受的问题仍然存在。这是MinGW还是gcc 4.9.1错误?

1 个答案:

答案 0 :(得分:3)

您需要使用

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

<强> live example