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();
};
這是一個非常常見的錯誤。這是故意的,它會阻止您複製CObject派生的對象。所以給CParam一個拷貝構造函數是一個失敗的原因。只需谷歌錯誤消息,以找到很多點擊。 –
@Hans Passant,CParm有一個拷貝構造函數。我嘗試添加一個拷貝構造函數並將賦值操作符複製到CParmArray。它不能解決問題。 – YLSA