invalid use of non-static member function
阿新 • • 發佈:2018-11-28
現在有一個 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/