OpenMP* PRIVATE variable requires usable default constructor

A PRIVATE variable of class type lacks a required constructor.

A PRIVATE clause effectively creates a per-thread temporary variable. If the variable has class type, the declaration is performed using the default constructor. The default constructor must exist, be unambiguous, and visible.

ID

Observation

Description

1

OpenMP usage error

The place the variable was marked as PRIVATE

Example


#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;
}
        

Copyright © 2010, Intel Corporation. All rights reserved.