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

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

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

  1. void 从 main.cpp 获取调用的函数,启动服务器监听 + 绑定(bind)
  2. void 函数,即从我之前声明的函数调用的线程

代码:

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 个参数的函数

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

最佳答案

在下一行中:

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);

就足够了。

关于C++ 在类中创建线程给出 c2064,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883715/

相关文章:

java - LWJGL 无法使用 OpenGL 3.2 或更高版本

c++ - 如何获得_bstr_t的长度

c++ - 如何从传递的数组中正确构造 CUSP coo 矩阵

multithreading - 在没有 MyThread.Terminate 的情况下终止线程

c++ - 是 struct A { int a[2] = {1, 2}; };根据 C++11 是否合法?

c++ - 判断点是否属于 3D 空间中的射线

c++ - Qt 拆分 QString

c++ - boost::asio 中的 post 和 dispatch 有什么区别?

multithreading - 具有多个生产者的高效消费者线程

c++ - 将闭包作为参数传递给构造函数 C++