gpt4 book ai didi

c++ - 为什么类成员变量不允许在 PPL 中为 [ &A, &B ]

转载 作者:行者123 更新时间:2023-11-30 04:21:03 26 4
gpt4 key购买 nike

编译之前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': a lambda capture variable must be from an enclosing function scope

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

我该怎么办?

最佳答案

捕获静态没有意义,因为它们是静态类。函数内定义的 lambda 与其定义的函数具有相同的可访问性。因此,在该函数中可见的变量(如类私有(private)变量)在 lambda 中也是可见的。

类静态成员仍然存在,即使该函数被传递到别处或超出当前作用域。

所以只需使用 []在你的 lambda 而不是 [ <stuff> ] .

关于c++ - 为什么类成员变量不允许在 PPL 中为 [ &A, &B ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14848972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com