OpenMP* PRIVATE 変数で使用可能なデフォルト・コンストラクターが不在

クラス型の PRIVATE 変数で必要なコンストラクターがありません。

PRIVATE 節はスレッドごとの一時変数を効率良く作成します。変数がクラス型の場合、宣言はデフォルト・コンストラクターを使用して実行されます。そのため、あいまいでない、可視性のあるデフォルト・コンストラクターがなければなりません。

ID

問題箇所

説明

1

OpenMP* の使用方法に関するエラー

変数が PRIVATE として指定された場所


#include <stdio.h>
#include <omp.h>

// Note: this class has no default constructor
class myClass {
    int m_myInt;
public:
    explicit myClass(int x) { m_myInt = x; }
    void set(int x) { m_myInt = x; }
    int get() { return m_myInt; }
};

myClass a(110);

int main(int argc, char **argv)
{
    int i;

    omp_set_num_threads(3);

    // INCORRECT: a has no accessible default constructor
    #pragma omp parallel for ordered private(a)
    for (i = 1; i < 10; i++) {

        a.set(i);

        #pragma omp ordered
        printf("i = %d, #threads = %d, a = %d\n", i, omp_get_thread_num(), a.get() );
    }
    
    return 0;
}
        

© 2010 Intel Corporation. 無断での引用、転載を禁じます。