1. 程式人生 > >invalid use of non-static member function

invalid use of non-static member function

現在有一個 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/