C OpenMP错误:';X';是预先确定的';共享';对于';私人';

C OpenMP错误:';X';是预先确定的';共享';对于';私人';,c,openmp,C,Openmp,有人知道为什么会出现以下代码吗 void foo(const int X) { #pragma omp parallel for private(X) for (int i = 0; i < 100; i++) { } } void foo(常量int X) { #pragma omp并行专用(X) 对于(int i=0;i

有人知道为什么会出现以下代码吗

void foo(const int X)
{
    #pragma omp parallel for private(X)
    for (int i = 0; i < 100; i++)
    {  }
}
void foo(常量int X)
{
#pragma omp并行专用(X)
对于(int i=0;i<100;i++)
{  }
}
给出了这个错误

错误:“X”预先确定为“专用”的“共享”


我如何才能真正使
X
成为每个线程的私有线程?

您会收到一个错误,因为
X
是常量。只要删除
const
,一切都应该正常。

X已经是
const
。。。你为什么要复制它?@pmg:我刚才做的是
const
,但非
const
变量也会出现同样的问题。。。你如何修复这些错误?你确定当X不是常数时会出现同样的错误吗?@csgillespie:My bad--我从代码中错误的赋值中删除了
const
限定符。(我有一个名为
rows
的变量,还有一个名为
\u rows
的变量,并且意外地从第二个变量中删除了它。)非常感谢!请随意发布答案,我会接受的。:)有趣的是,这个问题是特定于gcc的。icc允许这一点。这不是一个好的建议,只是为了摆脱这个消息而将常数变成可变变量。解决方案是:删除
private(X)
X
将默认为
shared
。因为
X
是一个常数,所以这是完全正确的。