【发布时间】:2013-02-13 08:04:25
【问题描述】:
在编译VS之前说
错误成员“test::A”不是变量
错误成员“test::B”不是变量
代码:
#include <iostream>
#include <ppl.h>
using namespace concurrency;
using namespace std;
class test
{
static double A[ 3 ][ 3 ];
static double B[ 3 ][ 3 ];
public:
int test_function();
};
double test::A[ 3 ][ 3 ] = { { 0.7, -0.2, -1 },
{ -4, -2, -2 },
{ -0.4, 1.7, -1.8 } };
double test::B[ 3 ][ 3 ] = { { 0.6, -1.2, 1.1 },
{ 2, 3, -2 },
{ -1, 0.05, 0.05} };
int test::test_function()
{
parallel_for ( 0, 100, [ &A, &B ]( int y ) {
for ( int x = 0; x < 100; x++ ) {
for ( int i = 0; i < 3; i++ )
for ( int j = 0; j < 3; j++ )
A[ j ][ i ] += A[ j ][ i ] * B[ j ][ i ];
}
} );
}
int main()
{
return 0;
}
错误:
'test::A': lambda 捕获变量必须来自封闭函数范围
'test::B': lambda 捕获变量必须来自封闭函数范围
我该怎么办?
【问题讨论】:
-
它在没有任何捕获的情况下工作吗?您不需要捕获静态数据。
-
为什么一定要捕获静态变量?
-
我是 C++ 新手,没有任何捕获怎么办?可以举个例子吗?
-
只需将
[ &A, &B ]更改为[]。 -
我更改代码,我应该保护 A 和 B,因为共享项目
标签: c++ parallel-processing ppl