2013-10-16 70 views
1

我從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中編譯啓用CLR的C++項目時出現C2248錯誤

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

這是一個非常常見的錯誤。這是故意的,它會阻止您複製CObject派生的對象。所以給CParam一個拷貝構造函數是一個失敗的原因。只需谷歌錯誤消息,以找到很多點擊。 –

+0

@Hans Passant,CParm有一個拷貝構造函數。我嘗試添加一個拷貝構造函數並將賦值操作符複製到CParmArray。它不能解決問題。 – YLSA

回答

0

嘗試改變CARRAY類使用實現拷貝contructors派生類。它在支持clr的DLL中工作正常。

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