Visual c++ 错误C2248:&x27;CObject::CObject';:无法访问类';CObject';

Visual c++ 错误C2248:&x27;CObject::CObject';:无法访问类';CObject';,visual-c++,mfc,Visual C++,Mfc,我将指定错误的原因。 请纠正我的错误: 代码 private: CStringArray m_strMnemonicArray; public: CStringArray getMnemonicSet(); CStringArray CParserDlg::getMnemonicSet() { return m_strMnemonicArray; } 我已将多个任务自动化为一个功能,如下所示: CStringArray CPars

我将指定错误的原因。 请纠正我的错误:

代码

   private:
   CStringArray m_strMnemonicArray;

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

我已将多个任务自动化为一个功能,如下所示:

    CStringArray CParserDlg::getMnemonicSet();
通过引用而不是值返回CStringArray

   CStringArray& CParserDlg::getMnemonicSet();

不仅可以消除编译器错误,而且C++中的经验法则也是通过指针(const)引用,或者如果不是,通过CasrnGrar数组传递对象。 原因是通过值传递会产生对象的临时副本。如果没有意识到这一点,则按值传递对象将产生不希望的结果,无论是在执行时间还是错误的结果(即,期望传入的对象在函数中发生了更改)

该错误的根本原因是CObject不可复制,但您正在按值传递CStringArray(从CObject派生)。按值传递意味着编译器将尝试创建对象的临时副本。由于CObject没有可用的复制构造函数,编译器会给出错误消息

但要补充一点,我更喜欢这个,而不是CStringArray:

  #include <vector>
  std::vector<CString> CStringVector;
#包括
std::向量CStringVector;

那么您就不会得到编译器错误,因为vector是可复制的(但您会遇到执行时间的问题以及我前面提到的可能的错误结果)。

我不知道您的标志是什么意思,所以我认为它无效。如果你想说些什么,请组成一个连贯的句子。另一个问题是,在哪里或者接受@karthik的答案。说真的,你有自卑情结吗?这是许多人的另一个问题,他们要么接受@karthik的答案,要么接受@karthik的答案。说真的,你有自卑情结吗?