Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C2248编译启用CLR的C++;Visual Studio 2012中的项目_C++_Visual Studio 2012 - Fatal编程技术网

C++ C2248编译启用CLR的C++;Visual Studio 2012中的项目

C++ C2248编译启用CLR的C++;Visual Studio 2012中的项目,c++,visual-studio-2012,C++,Visual Studio 2012,我从Visual Studio 2010升级到Visual Studio 2012。我的解决方案在VisualStudio2010中构建良好。然而,在VisualStudio 2012中,CLR启用的C++项目抛出C2248“COBject::COBject”:不能从下面的导出类中访问类“COBject”中声明的私有成员。如果我为cparray注释掉AFX_CLASS_EXPORT,则项目编译时不会出错。或者,如果我关闭CLR支持,它也可以编译而不出错。但这些都不是选项,因为解决方案中的其他项目

我从Visual Studio 2010升级到Visual Studio 2012。我的解决方案在VisualStudio2010中构建良好。然而,在VisualStudio 2012中,CLR启用的C++项目抛出C2248“COBject::COBject”:不能从下面的导出类中访问类“COBject”中声明的私有成员。如果我为cparray注释掉AFX_CLASS_EXPORT,则项目编译时不会出错。或者,如果我关闭CLR支持,它也可以编译而不出错。但这些都不是选项,因为解决方案中的其他项目在构建时会出现链接错误

Visual Studio 2012中发生了哪些可能导致此问题的更改?如何更正错误

谢谢你的建议

编译器输出:

1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\afxtempl.h(262): error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
 1>          C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\afx.h(559) : see declaration of 'CObject::CObject'
 1>          C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\afx.h(534) : see declaration of 'CObject'
 1>          This diagnostic occurred in the compiler generated function 'CArray<TYPE,ARG_TYPE>::CArray(const CArray<TYPE,ARG_TYPE> &)'
 1>          with
 1>          [
 1>              TYPE=int *,
 1>              ARG_TYPE=int *&
 1>          ]
1>C:\Program Files(x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\afxtempl.h(262):错误C2248:“CObject::CObject”:无法访问类“CObject”中声明的私有成员
1> C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\afx.h(559):请参见“CObject::CObject”的声明
1> C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\afx.h(534):请参见“CObject”的声明
1> 此诊断发生在编译器生成的函数“CArray::CArray(const CArray&)”中
1> 与
1>          [
1> 类型=int*,
1> ARG_TYPE=int*&
1>          ]
代码:

class-AFX\u class\u导出cparray:public CArray
{
公众:
cparray();
CParmArray(const CParmArray&testArray);
void运算符=(常量cparray和testArray);
虚拟~cparray();
};

尝试使用实现复制构造函数的派生类更改CArray类。它在我的DLL中工作良好,支持clr

  class AFX_CLASS_EXPORT CArrayEx : public CArray
 {
   public:
    CArrayEx()
   {
   }
   protected:
    CArrayEx(const CArrayEx& objectSrc);// with empty implementation
};

这是一个非常常见的错误。这是有意的,它阻止您复制CObject派生的对象。因此,给CPRAM一个复制构造函数是一个失败的原因。只要用谷歌搜索错误消息就可以找到很多点击。@Hans Passant,CParm有一个复制构造函数。我尝试向cparray添加复制构造函数和复制赋值运算符。这并不能解决问题。
  class AFX_CLASS_EXPORT CArrayEx : public CArray
 {
   public:
    CArrayEx()
   {
   }
   protected:
    CArrayEx(const CArrayEx& objectSrc);// with empty implementation
};