2013-02-13 3 views
1

Перед компилировать VS говорит, чтоПочему переменная член класса не имеет права быть [& A, и B] в госзакупках

член Error «тест :: A» не является переменной

член Error «тест :: 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': a lambda capture variable must be from an enclosing function scope

'test::B': a lambda capture variable must be from an enclosing function scope

Что мне делать?

+0

Работает ли это без каких-либо захватов? Вам не нужно захватывать статику. – Pubby

+0

Почему вы должны фиксировать статические переменные? –

+0

i'am new in C++, как я могу обойтись без каких-либо захватов? Можете ли вы привести мне пример? – user2055437

ответ

2

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

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

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

+0

Кроме того, что они являются частными глобалами. У них все еще есть доступ? – Pubby

+0

@ Пубби: Извините; пропустил это. Но логика остается прежней. И да, они имеют доступ; лямбда от члена класса считается членом класса. –

+0

Как защитить A, это глобальный и общий элемент? – user2055437