我将指出错误原因。 请纠正我的错误:
CODE
private:
CStringArray m_strMnemonicArray;
public:
CStringArray getMnemonicSet();
CStringArray CParserDlg::getMnemonicSet()
{
return m_strMnemonicArray;
}
答案 0 :(得分:0)
我已将多项任务自动化为如下所示的功能:
CStringArray CParserDlg::getMnemonicSet();
通过引用返回CStringArray,而不是值。
CStringArray& CParserDlg::getMnemonicSet();
这不仅可以消除编译器错误,在C ++中通过(const)引用传递CStringArray等对象,或者如果没有,通过指针传递对象也是一个经验法则。
原因是按值传递会产生对象的临时副本。如果不知道它,按值传递对象将在执行时间和错误结果中产生不良结果(即期望传入的对象在函数内发生变化)。
错误的根本原因是CObject不可复制,但是您通过值传递CStringArray(源自CObject)。按值传递意味着编译器将尝试生成对象的临时副本。由于CObject没有可用的拷贝构造函数,编译器会给你错误。
但是补充一点,我比CStringArray更喜欢这个:
#include <vector>
std::vector<CString> CStringVector;
然后你就不会得到编译器错误,因为vector是可复制的(但你会遇到执行时间和我前面提到的错误结果的问题)。