【问题标题】:error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'错误 C2248:“CObject::CObject”:无法访问在类“CObject”中声明的私有成员
【发布时间】:2011-09-06 21:24:06
【问题描述】:

我将说明我的错误的原因。 请纠正我的错误:

代码

   private:
   CStringArray m_strMnemonicArray;

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

【问题讨论】:

  • 我不知道你的标志是什么意思,所以我认为它无效。如果你想说什么,请形成一个连贯的句子。
  • karthikuser692270 接受 @karthik 的答案的许多问题。说真的,你有自卑感吗?

标签: visual-c++ mfc


【解决方案1】:

我已经将几个任务自动化成如下所示的函数:

    CStringArray CParserDlg::getMnemonicSet();

通过引用返回 CStringArray,而不是值。

   CStringArray& CParserDlg::getMnemonicSet();

这不仅可以消除编译器错误,而且在 C++ 中通过 (const) 引用传递对象(如 CStringArray)也是一个经验法则,如果不是,则通过指针传递。

原因是按值传递会导致对象的临时副本。如果没有意识到这一点,按值传递对象会在执行时间和错误结果(即预期传入的对象在函数内发生更改)方面产生不良结果。

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

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

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

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

【讨论】:

  • karthikuser692270 接受 @karthik 的答案的许多问题。说真的,你有自卑感吗?
猜你喜欢
  • 2015-05-05
  • 1970-01-01
  • 2013-07-28
  • 2013-04-24
  • 1970-01-01
  • 2014-08-07
  • 2015-09-05
  • 2021-05-13
相关资源
最近更新 更多