C++线程"Call to non-static member function without an object argument"



场景:我正在尝试使用三个线程来执行另一个对象中包含的对象的非静态成员函数。代码无法编译,即使我传递指向每个对象的指针,我也收到错误"在没有对象参数的情况下调用非静态成员函数"。我也尝试使用std::ref((。

#include <iostream>
#include <thread>
#include <vector>
class B {
public:
int val;
B(int i) : val(i) {};
void show_val() {
std::cout << val << std::endl;
}
};
class A {
public:
std::vector<B> bs;
void add_b(int i) {
bs.push_back(B(i));
}
void do_someting() {
{
thread t1(B::show_val(), &(a.bs[0]));
thread t2(B::show_val(), &(a.bs[1]));
thread t3(B::show_val(), &(a.bs[2]));
t1.join();
t2.join();
t3.join();
}
}
};
int main() {
A a;
a.add_b(1);
a.add_b(2);
a.add_b(3);
a.do_someting();
return 0;
}

关于这个具体问题,我找不到太多。通常,当我从类 B 本身中调用并将此指针传递给线程构造函数时,这种代码对我有用。

>B::show_val()是一个函数调用。 你不想打电话给B::show_val,你想取它的地址:&B::show_val

请注意,&是必需的。 非静态成员函数不能隐式转换为指向成员函数的指针,这与自由函数和静态成员函数不同,后者可隐式转换为函数指针。

相关内容

最新更新