Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将变量作为引用传递给C++;_C++_Multithreading_Concurrency - Fatal编程技术网

C++ 将变量作为引用传递给C++;

C++ 将变量作为引用传递给C++;,c++,multithreading,concurrency,C++,Multithreading,Concurrency,我试着让几个线程同时计算平均值、最小值、最大值和标准偏差 如下所示(T是一个100大小的双数组): 在方法中: void average(double* T, double &average) { double sum=0.0; for(int i=0;i<100;i++){ sum +=T[i]; } average = sum/100; } 但它失败并显示此错误: In file included from /usr/include/c++/4.8/thread:

我试着让几个线程同时计算平均值、最小值、最大值和标准偏差

如下所示(T是一个100大小的双数组):

在方法中:

void average(double* T, double &average) {
double sum=0.0;
for(int i=0;i<100;i++){
    sum +=T[i];
}
average = sum/100;  
}
但它失败并显示此错误:

In file included from /usr/include/c++/4.8/thread:39:0,
             from ejercicio_4.cpp:2:
/usr/include/c++/4.8/functional: In instantiation of ‘struct std::_Bind_simple<double*(double*, std::reference_wrapper<double>)>’:
/usr/include/c++/4.8/thread:137:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = double*; _Args = {double (&)[100], std::reference_wrapper<double>}]’
ejercicio_4.cpp:89:40:   required from here
/usr/include/c++/4.8/functional:1697:61: error: no type named ‘type’ in ‘class std::result_of<double*(double*, std::reference_wrapper<double>)>’
       typedef typename result_of<_Callable(_Args...)>::type result_type;
                                                             ^
/usr/include/c++/4.8/functional:1727:9: error: no type named ‘type’ in ‘class std::result_of<double*(double*, std::reference_wrapper<double>)>’
         _M_invoke(_Index_tuple<_Indices...>)
         ^
在/usr/include/c++/4.8/thread:39:0中包含的文件中,
来自ejercicio_4.cpp:2:
/usr/include/c++/4.8/functional:在“struct std:_Bind_simple”的实例化中:
/usr/include/c++/4.8/thread:137:47:从'std::thread::thread(_Callable&&,_Args&&…[with _Callable=double*;_Args={double(&)[100],std::reference_wrapper}]中需要'
ejercicio_4.cpp:89:40:从这里开始需要
/usr/include/c++/4.8/functional:1697:61:错误:在'class std::result_of'中没有名为'type'的类型
typedef typename result_of::type result_type;
^
/usr/include/c++/4.8/functional:1727:9:错误:在'class std::result_of'中没有名为'type'的类型
_M_invoke(_Index_tuple)
^
我有g++4.8,所以它应该与线程一起工作,我不知道是什么导致了这个错误


提前感谢。

第一行有一个输入错误或名称冲突,您将函数名(
average
)而不是目标变量的名称作为第二个参数传递。你可能想写的是:

double avg;
P[0] = thread(&average, T, ref(avg));

也许这不是打字错误,而是名字冲突哇!就这样!我不敢相信我错过了,我是如此确定这是一个参考错误,我没有意识到,谢谢!!你能提供一个最小的测试用例吗?
In file included from /usr/include/c++/4.8/thread:39:0,
             from ejercicio_4.cpp:2:
/usr/include/c++/4.8/functional: In instantiation of ‘struct std::_Bind_simple<double*(double*, std::reference_wrapper<double>)>’:
/usr/include/c++/4.8/thread:137:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = double*; _Args = {double (&)[100], std::reference_wrapper<double>}]’
ejercicio_4.cpp:89:40:   required from here
/usr/include/c++/4.8/functional:1697:61: error: no type named ‘type’ in ‘class std::result_of<double*(double*, std::reference_wrapper<double>)>’
       typedef typename result_of<_Callable(_Args...)>::type result_type;
                                                             ^
/usr/include/c++/4.8/functional:1727:9: error: no type named ‘type’ in ‘class std::result_of<double*(double*, std::reference_wrapper<double>)>’
         _M_invoke(_Index_tuple<_Indices...>)
         ^
double avg;
P[0] = thread(&average, T, ref(avg));