處理VC++編譯報錯error C2248的計劃。本站提示廣大學習愛好者:(處理VC++編譯報錯error C2248的計劃)文章只能為提供參考,不一定能成為您想要的結果。以下是處理VC++編譯報錯error C2248的計劃正文
在應用諸如:CArray或是 CList等類時,常常會湧現此毛病
此毛病的緣由是因為自界說的類的數組項時
有一個操作如 Add() 在這個操作中,現實上須要一個 = 操作,然則這個 =操作在 自界說類中沒有完成,因而,法式主動去它的parent 類 也就是 CObject 類去找,然則卻找到個這個類的 = 是一個 private 因而就報了這個毛病.
曉得了緣由處理辦法天然就有了,那就是在自界說類中 重載操作符 = 重載後 這個毛病就沒有了.
class COptRect : public CObject { public: COptRect(); virtual ~COptRect(); // 操作的肇端規模 CRect m_OptStartRect; // 操作的停止規模 CRect m_OptEndRect; // 操作的目的界面 int m_OptDesSurface; COptRect& operator = (COptRect & src); };
完成代碼
COptRect::COptRect() : m_OptDesSurface(0) { } COptRect::~COptRect() { } COptRect& COptRect::operator = (COptRect & src) { this->m_OptDesSurface = src.m_OptDesSurface; this->m_OptEndRect = src.m_OptEndRect; this->m_OptStartRect = src.m_OptStartRect; return *this; }
那末在完成了這個自界說類後,開端應用它
先界說變量數組
CArray<COptRect, COptRect&> optArray;
在這個數組後,我們應用一個添加新元素的敕令
// 向界面添加一個操作區域 void CSurface::AddOptRect(CRect Start, CRect End, int DesID) { COptRect ort; ort.m_OptStartRect = Start; ort.m_OptEndRect = End; ort.m_OptDesSurface = DesID; optArray.Add(ort); }
如斯操作後,不再報下面的毛病!成績處理
案例二:
在寫一個MFC法式,編譯的時刻出了個error C2248: “CObject::operator =”: 沒法拜訪 private 成員(在“CObject”類中聲明),定位不到那部門的代碼出了成績,
看網上有很多人也碰到了這個成績。
剖析了下我寫的法式與之前的分歧,個中有個一個處所用到了Image Picture控件的CStatic類對象,一開端用的指針對象,後來改成對象就除下面的成績,改回來就ok了.
後來查了一下,這類對控件操作的對象最好都聲明成指針,否則就會報下面的毛病。