c++ - 指向成员函数错误的指针

标签 c++ multithreading pointers boost

<分区>

当我编译以下代码时,出现以下错误。谁能帮我解决这个问题。谢谢。

错误:ISO C++ 禁止采用绑定(bind)成员函数的地址来形成指向成员函数的指针。说‘&foo::abc’[-fpermissive]

boost::thread testThread(boost::bind(&f.abc, f));

................................................ ...................................^

#include <iostream>
#include <boost/asio.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/thread.hpp>

class foo
{
    private:

    public:
    foo(){}

    void abc()
    {
        std::cout << "abc" << std::endl;
    }
};

int main()
{
    foo f;

    boost::thread testThread(&f.abc, f);

    return 0;
}

最佳答案

错误信息再清楚不过了

Say ‘&foo::abc’

boost::thread testThread(boost::bind(&foo::abc, f));
//                                   ^^^^^^^

此外,不需要 boost::bind,这也应该可以工作

boost::thread testThread(&foo::abc, f);

请注意,这两者都会复制 f,如果您想避免使用以下任一方法

testThread(&foo::abc, &f);
testThread(&foo::abc, boost::ref(f));

现在,为什么 main()class zoo 的成员函数??

关于c++ - 指向成员函数错误的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29691055/

相关文章:

java - 我如何检测我的方法在等待什么?

c++更改作为函数参数传递的指针值

c++ - 列表<myClass<int> * > 排序

c++ - 访问冲突读取位置 0xcccccd84

C++头文件重定义错误

C++ const 字符串非模板参数

c++ - C++20 中的 iterator_category 和 iterator_concept 有什么区别?

c++ - gcc 支持 set_value_at_thread_exit() 吗?

java - 如何在 RABBITMQ 中为消费者端设置时间

c++ - 传入并存储指向对象的函数指针