C++ C2248编译启用CLR的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 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支持,它也可以编译而不出错。但这些都不是选项,因为解决方案中的其他项目
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
};