Почему переменная члена класса не может быть [& amp; A, & B;] в PPL

Перед компиляцией 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’: переменная захвата лямбды должна быть из области действия функции

‘test :: B’: переменная захвата лямбды должна быть из области действия функции

что я должен делать?

1

Решение

Захватывать статики нет смысла, потому что они класс статический. Лямбда, определенная в функции, имеет такую ​​же доступность, что и функция, в которой она определена. Таким образом, переменные, которые видны внутри этой функции (например, рядовые классы), видны внутри лямбды.

Статические члены класса по-прежнему будут существовать, даже если функция будет передана в другом месте или переживет текущую область.

Так что просто используйте [] в твоей лямбде вместо [ <stuff> ],

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]