2011-04-02 35 views
3

有谁知道为什么下面的代码OpenMP的错误:“X”是预先确定的“共享”的“私人”

void foo(const int X) 
{ 
    #pragma omp parallel for private(X) 
    for (int i = 0; i < 100; i++) 
    { } 
} 

给出了这样的错误

error: 'X' is predetermined 'shared' for 'private'

,我怎么能真正让X私人到每个线程?

+1

X已经是'const'了......你为什么要复制它? – pmg 2011-04-02 20:38:56

+0

@pmg:它恰好是我在做什么时候的'const',但同样的问题发生在非''contst'变量上......你如何解决这些问题? – Mehrdad 2011-04-02 20:47:50

+0

当X不是常量时,你确定会得到相同的错误吗? – csgillespie 2011-04-02 21:33:23

回答

4

由于X是固定的,因此您会收到错误消息。只要删除const,一切都应该工作。

+1

这不是一个很好的建议,只是为了摆脱这个消息而不断变成一个可变变量。解决方法是:删除'private(X)'。那么'X'将默认为'shared'。既然'X'是一个常数,这是完全正确的,并且保存。 – 2013-12-05 15:25:15