在将此标记为重复之前,我已经看到了其他答案,但它们没有解决我的问题。
我有两个课程如下:
A.cpp:
class A
{
public:
A();
int getValue()//just an example of a get method
{
return value;
}
private:
int value;
// a lot of variables
}
B.cpp:
class B
{
public:
B();
void addData(string fileName)
{
A* a = new A();
//reads the file with the fileName and does alot of stuff
//after calculation is over it adds the object to the vector
list.push_back(a);
}
void run()
{
thread t1(&B::simulate, list[0]);
thread t2(&B::simulate, list[1]);
t1.join();
t2.join();
}
private:
vector<A*> list;
void simulate(A* ptr)
{
int value = 0;
cout << "At first value is " << value << endl;
weight = ptr->getValue();
cout << "Then it becomes " << value << endl;
}
}
然后我有一个简单的main.cpp:
int main()
{
B* b = new B();
b->addData("File1.txt");
b->addData("File2.txt");
b->run();
return 0;
}
我试图通过调用方法run()来创建两个线程。但是,当我尝试编译时,我收到以下错误:
error C2672: 'std::invoke': no matching overloaded function found
我检查了其他帖子,但似乎没有什么对我有用。任何帮助将不胜感激。
P.S:我使用以下内容包括:
#include <thread>
#include <iostream>
还有:
using namespace std;
我正在使用其他包含,但它们无关紧要
答案 0 :(得分:3)
B::simulate
是一个非静态成员函数,因此它需要2个参数 - this
和ptr
,而您只提供一个参数。您应该将其重新声明为静态,因为它无论如何都不会访问this
类成员。