【问题标题】:"error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject' [duplicate]“错误C2248:'CObject :: CObject':无法访问在类'CObject'中声明的私有成员[重复]
【发布时间】:2009-05-14 18:46:10
【问题描述】:

可能重复:
error using CArray

重复:error using CArray


所以,我正在尝试像这样使用 CArray:

   CArray<CPerson,CPerson&> allPersons;
   int i=0;
   for(int i=0;i<10;i++)
   {
      allPersons.SetAtGrow(i,CPerson(i));
      i++;
   }

但是在编译我的程序时,我得到了这个错误:

"error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject' c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxtempl.h"

我什至不明白这是从哪里来的。

帮助!

【问题讨论】:

标签: c++ mfc


【解决方案1】:

问题是您正在堆栈上构造一个 CObject。在程序中的某个地方,您试图传递对 CArray 对象的引用,但您不小心遗漏了函数原型中的“&”。例如:

void DoFoo(CArray cArr)
{
    // Do something to cArr...
}

^^^ 上面的代码会导致你遇到的错误。

void DoFoo(CArray & cArr)
{
    // Do something to cArr...
}

^^^ 上面的代码不会导致问题。

【讨论】:

  • 这正是我所做的并且一直在寻找问题,直到我在这里搜索。好电话。
  • 函数原型中甚至不需要缺少 &。我的代码中的问题在变量声明中丢失了。
  • 它对我有用。谢谢。
【解决方案2】:

为您的类 (CPerson) 编写一个构造函数并将其公开。它应该可以解决问题。

【讨论】:

    【解决方案3】:

    这意味着你的程序正在尝试构造一个CObject 的实例,这似乎被禁止了,因为CObject 有一个私有构造函数。

    也许CArray 正在尝试构建这些实例?程序的其余部分是什么样的?

    【讨论】:

    • 是的,我认为这与 CArray 试图构造 CObject 的实例有关。但是我该如何规避这个问题呢?
    • 就像我问的那样,程序的其余部分是什么样的?发布最短的完整程序来演示问题,省略任何向导生成的东西等。
    猜你喜欢
    • 2011-09-06
    • 2015-05-05
    • 2013-07-28
    • 2013-04-24
    • 1970-01-01
    • 2014-08-07
    • 2015-09-05
    • 2021-05-13
    相关资源
    最近更新 更多