Как передать в поток ссылку на объект класса?
Есть объект класса в main, который должен передаваться (как я понимаю по ссылке) и изменяться в потоке, пока тот не завершится. Но не компилируется код. Вычитал что надо обернуть в ref объект класса, но я запутался в том где ref, где указатель, где ссылка, вылетает куча ошибок линкера.... Помогите пожалуйста Упрощённо:
class A
{
public:
int a,b;
A():a(1),b(5){}
void Print(){cout<<a<<"\t"<<b<<endl;}
} ;
void SomeFunc(A _obj)
{
_obj.a++;
_obj.b--;
}
int main()
{
A obj;
thread t1(SomeFunc, obj);
t1.join();
obj.Print(); // должны вывестись измененные переменные
}
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Передавать надо по ссылке, и все будет получаться:
#include <iostream>
#include <thread>
using namespace std;
class A {
public:
int a, b;
A(): a(1), b(5) {}
void Print() {
cout << a << "\t" << b << endl;
}
};
void SomeFunc(A& _obj) {
_obj.a++;
_obj.b--;
}
int main() {
A obj;
thread t1(SomeFunc, std::ref(obj));
t1.join();
obj.Print(); // должны вывестись измененные переменные
}