我正在使用OpenMP,我在Windows VC ++ 13中将变量设置为私有。这些变量是类实例。该类是一个复杂的类,包含指针,其他类的实例,嵌套和深层。我可以确定所有内容都适当地提供给线程的私有副本吗?
此外,我无法将类实例设为私有,它不会链接,它说
error LNK2019: unresolved external symbol "public: __cdecl ClassName::ClassName(void)" (??0ClassName@@QEAA@XZ) referenced in function ...
答案 0 :(得分:0)
声明为private
的变量是非私有副本。它的初始值是,好像它是在没有初始化程序的情况下在本地声明的。因此,对于class
,它是默认构造的。该标准明确要求
A variable of class type (or array thereof) that appears in a private clause requires an accessible, unambiguous default constructor for the class type.
您的错误消息只是告诉您它已丢失。
也许您将private
与firstprivate
混淆,后者实际上是从并行区域之外的原始值初始化。对于那些,您需要一个复制构造函数。代码的正确性取决于正确实现的复制构造函数。