2011-06-02 63 views
0

我將指定我的錯誤原因。 請糾正我的錯誤:錯誤C2248:'CObject :: CObject':無法訪問在'CObject'類中聲明的私有成員

CODE

private: 
    CStringArray m_strMnemonicArray; 

    public: 
    CStringArray getMnemonicSet(); 
    CStringArray CParserDlg::getMnemonicSet() 
    { 
     return m_strMnemonicArray; 
    } 
+0

我不知道你的旗幟是什麼意思,所以我把它視爲無效。如果你想說點什麼,請形成一個連貫的句子。 – 2011-06-02 15:44:35

+0

許多問題的另一個問題是[karthik](http://stackoverflow.com/users/644073/karthik)或[user692270](http://stackoverflow.com/users/692270/user692270)接受@karthik的答案。嚴重的是,你是否患有自卑感? – 2011-09-27 07:34:27

回答

0

我有自動幾項任務成一個函數如下所示:

CStringArray CParserDlg::getMnemonicSet(); 

回報的CStringArray通過參考,並不值。

CStringArray& CParserDlg::getMnemonicSet(); 

這不僅擺脫編譯器錯誤的,它也是拇指的C++中的規則通過(常數)引用傳遞對象,如CStringArray的,或者如果沒有,通過指針。

原因是通過值傳遞對象的臨時副本。如果沒有意識到,按值傳遞對象會產生不希望的結果,無論是執行時間還是錯誤結果(即期望傳入的對象在函數中發生更改)。

錯誤的根本原因是CObject不可複製,但是您按值傳遞了CStringArray(它是從CObject派生的)。按值傳遞意味着編譯器將嘗試創建對象的臨時副本。由於CObject沒有可用的拷貝構造函數,因此編譯器會給出錯誤信息。

但要加,我會更喜歡這個比的CStringArray:

#include <vector> 
    std::vector<CString> CStringVector; 

那麼你就不會得到編譯器錯誤,因爲載體是可複製(但你會得到的執行時間的問題,我前面提到的可能的錯誤結果)。

+0

許多問題的另一個問題,其中[karthik](http://stackoverflow.com/users/644073/karthik)或[user692270](http://stackoverflow.com/users/692270/user692270)接受@karthik的答案。嚴重的是,你是否患有自卑感? – 2011-09-27 07:33:58

相關問題