在类中创建线程的C ++给出了c2064

时间:2014-09-17 06:27:50

标签: c++ multithreading c++11 boost boost-thread

最近我开始使用boost :: thread(也尝试使用STL - thread)来构建聊天。 我在我的“服务器站”做了一个有

的课程
  1. void函数,从main.cpp获取调用,启动服务器监听+绑定
  2. void函数,它是从我之前所述的函数调用的线程
  3. 代码:

    this is ServerSocket.cpp file
    
    void ServerSocket::startHosting()
    {
        Bind();
        Listen();
    
        boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener);
    }
    
    //This is the thread function
    
    void ServerSocket::clientsListener()
    {
         ..... handling incoming clients sockets  , code goes here ....
    }
    

    在创建线程部分,我添加了'this',因为我在stackoverflow上读到一个非静态成员函数必须具有代表该类的'this'成员,但是当我添加我有另一个错误但是这次1当没有给出'this'时,值而不是0

    错误C2064 - 术语不评估为采用1参数的函数

    有人知道如何解决这个问题并解释我的答案吗? 我可以做一个静态函数,但这需要我将该函数中我需要的所有其他成员作为静态函数并且我不想这样做

1 个答案:

答案 0 :(得分:2)

在以下行中:

boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener);

传递成员函数指针但缺少要应用指针的对象。你可能想要这样的东西:

boost::thread clients_listener = boost::thread(&ServerSocket::clientsListener, this);

此外,您不需要在与Java相同的行上拼写两次类型,因此:

boost::thread clients_listener(&ServerSocket::clientsListener, this);

就足够了。