invalid use of non-static member function

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengfengdiandia/article/details/82465987

现在有一个 Object 类,它有两个方法:

  • Recv 负责接收数据,并传递给 Process
  • Process 负责处理数据

我们希望这个类接收完数据后启动线程去处理,不阻塞后面的其他业务逻辑。

class Object {
 public:
  void Recv() {
    int a = 2;
    std::thread t(Process, a);
    // Do something
    t.join();
  }

  void Process(int val) {
    std::cout << "Process, val=" << val << "\n";
  }
};

编译报错 error: invalid use of non-static member function

解决方案:

方式一:

//std::thread t(Process, a);              // 修改前
std::thread t(&Object::Process, this, a); // 修改后

方式二:设置 Process 为静态函数

void Recv() {
  int a = 2;
  std::thread t(&Object::Process, a); // 修改后
  // Do something
  t.join();
}

static void Process(int val) {        // 修改后
  std::cout << "Process, val=" << val << "\n";
}

参考

https://thispointer.com/c11-start-thread-by-member-function-with-arguments/

猜你喜欢

转载自blog.csdn.net/fengfengdiandia/article/details/82465987