指向成员函数错误的指针

时间:2015-04-17 05:26:58

标签: c++ multithreading pointers boost

当我编译下面的代码时,我收到以下错误。任何人都可以帮我解决这个问题。谢谢。

错误:ISO C ++禁止获取绑定成员函数的地址以形成指向成员函数的指针。说'& 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;
}

4 个答案:

答案 0 :(得分:4)

错误信息实际上不是更清楚

  

说'&amp; 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 ??

的成员函数

答案 1 :(得分:1)

按错误说明,将f.abc替换为foo::abc

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

答案 2 :(得分:1)

使用:

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

答案 3 :(得分:0)

正如@Praetorian所说。一切正常:

//Title of this code
//Compiler Version 18.00.21005.1 for x86

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

class zoo;

class foo
{
    private:

    public:
    foo(){}

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

class zoo
{
    public:
    int main()
    {
        foo f;

        boost::thread testThread(boost::bind(&foo::abc, &f));
        testThread.join();
        return 0;
    }
}; 

int main()
{
    zoo{}.main();
}

直播:http://rextester.com/XDE37483