我在C ++中遇到线程问题。我想创建由分配了特定对象的类成员方法组成的线程。此外,另一个用户定义类的对象将传递给该方法。请在下面找到代码:
Grid an_chan(NX, NY, xmax, ymax);
an_chan.calc_paraFlow(anode);
Grid *ptr_grid = &an_chan;
Variable T(Tin, Tinit, lambda_m, rho_m, Cp_m);
Variable *ptr_T = &T;
std::thread first (&Variable::initialize, ptr_T, ptr_grid);
first.join();
这是初始化方法的原型:
void Variable::initialize(Grid& grid_obj)
在尝试添加线程之前,一切都工作正常。
我只是想知道这是否不是编译器问题?也许我的代码有问题,我无法注意到?任何可能的修复?
下面,我包括了编译器返回的错误。如您所见,我正在使用TDM GCC 5.1.0。我以前在线程中使用它,并且一切正常。
在C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c ++ / thread:39:0包含的文件中,
来自main.cpp:13:
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c ++ / function:在'struct std :: _ Bind_simple(chal :: Variable,chal :: Grid)>的实例中':
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c ++ / thread:142:59:需要'std :: thread :: thread(_Callable &&,_Args && ... )[with _Callable = void(chal :: Variable :: *)(chal :: Grid&); _Args = {chal :: Variable&,chal :: Grid&}]'
main.cpp:45:61:从这里需要
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c ++ / functional:1505:61:错误:在'std :: result_of(chal)类中没有名为'type'的类型::变量,chal :: Grid)>'
typedef类型名result_of :: type result_type;
^
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c ++ / functional:1526:9:错误:在'std :: result_of(chal)类中没有名为'type'的类型::变量,chal :: Grid)>'
_M_invoke(_Index_tuple )
最佳答案
当您的initialize
函数通过引用获取其参数时,应将参数包装在std::ref
中。
std::thread first(&Variable::initialize, ptr_T, std::ref(*ptr_grid));