我在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));

09-10 05:23
查看更多