Before marking this as duplicate, I have already seen the other answers and they did not solve my issue.
I have two classes as follows:
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;
}
}
And then I have a simple main.cpp:
int main()
{
B* b = new B();
b->addData("File1.txt");
b->addData("File2.txt");
b->run();
return 0;
}
I am trying to create two threads by calling the method run(). However, when I try to compile I get the following error:
error C2672: 'std::invoke': no matching overloaded function found
I checked the other posts but nothing seemed to work for me. Any help would be appreciated.
P.S: I am using the following includes:
#include <thread>
#include <iostream>
and also:
using namespace std;
I am using other includes but they are irrelevant
B::simulate
is a non-static member function so it requires 2 parameters - this
and ptr
, while you supplying only one. You should redeclare it as static since it does not access this
class members anyway.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With