2011-06-02 102 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

相关问题