在Visual Studio 2012中编译启用CLR的C ++项目时出现C2248错误

时间:2013-10-16 17:49:03

标签: c++ visual-studio-2012

我从Visual Studio 2010升级到Visual Studio 2012.我的解决方案在Visual Studio 2010中构建良好。但是在Visual Studio 2012中,启用CLR的C ++项目抛出c2248'CObject :: CObject':无法访问类中声明的私有成员来自下面的出口类的'CObject'。如果我为CParmArray注释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>          ]

代码:

class AFX_CLASS_EXPORT CParmArray : public CArray<int, int* &>
{
public:
  CParmArray();
  CParmArray(const CParmArray& testArray);
  void operator=(const CParmArray& testArray);
  virtual ~CParmArray();
};

1 个答案:

答案 0 :(得分:0)

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

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