MFC中CArray的巢狀問題

2021-06-02 03:03:14 字數 818 閱讀 8567

當carray 巢狀時候,許多情況下會發生c2448;c2664;c2582這樣的錯誤。

並且指示carray的內部錯誤。

在kb231995中,微軟描述了問題,並且簡要的訴說了解決方案。

英文版本: 

中文機器翻譯版本:

事情的緣由有2個。

1.對於沒有賦值操作符(operate =)的復合資料結構(struct和class等等),編譯器會自動生成乙個預設的賦值操作符,她會列舉資料結構的所有成員,然後複製。 於是,對於乙個包含carray的復合資料結構,預設的賦值操作符會把carray自身的資料結構一併複製。

2.carray繼承自cobject。對於cobject和carray的私有成員,任何複製的請求都會被拒絕。(實際上,你也不應該複製carray自身,相反,複製carray包含的使用者資料。一般可以使用carray::copy)

於是carray巢狀就會出現以上錯誤。

解決建議實現乙個拷貝建構函式和乙個賦值操作符。

舉例來自:effective c++

class string ;

class b

/* const b& */ void operator= (const b& b)

protected:

carrayarraya;

};b::b(){}

b::~b(){}

class c

;c::c(){}

c::~c(){}

void c::addelement()

void main()

這個問題一直都解決,今天解決了,所以放到部落格裡面,主要要多看看微軟的一些文章!

listview巢狀問題

publicstaticvoidsetlistviewheightbasedonchildren listview listview inttotalheight 0 for inti 0,len listadapter.getcount i len i viewgroup.layoutparams...

信封巢狀問題

給n個信封的長度和寬度。如果信封a的長和寬都小於信封b,那麼信封a可以放到信封b裡,請求出信封最多可以巢狀多少層。輸出包含多行,第一行包括乙個整數,代表信封的個數n 1 n 100000 接下來n行,每行兩個整數li和wi 代表信封的長度和寬度 1e9 include includeusing na...

CDATA巢狀問題

在cdata內部的所有內容都會被解析器忽略。乙個 cdata 部件以 標記結束。但是cdata是不能夠巢狀的。因cdata巢狀導致的xml解析錯誤的問題,參考網上處理方式,解決這個問題只需要將 替換成 替換後文字作為cdata引數傳入,將原cdata識別為多個cdata,自動連線後返回。多層巢狀同理...