【问题标题】:Trying to pass a CStringArray gives error cannot access private member declared in class 'CObject'试图传递一个 CStringArray 给出错误无法访问在类“CObject”中声明的私有成员
【发布时间】:2015-01-19 01:29:35
【问题描述】:

我收到一个奇怪的错误,告诉我我无法访问在类“CObject”中声明的私有成员,而只是尝试将 CStringArray 传递给我编写的将其分解为多个部分的函数。 我已经注释掉了我的整个函数代码,所以我知道问题存在于对象本身的传递中,我假设我这样做不正确。

这是我的代码:

    // If successful, read file into CStringArray
    CString strLine;
    CStringArray lines;
    while (theFile.ReadString(strLine))
    {
        lines.Add(strLine);
    }

    // Close the file, don't need it anymore
    theFile.Close();

    // Break up the string array and separate it into data
    CStringArrayHandler(lines);

这是我的 CStringArrayHandler 函数:

void CSDI1View::CStringArrayHandler(CStringArray arr)
{
    // Left out code here since it is not the cause of the problem
}

这是我的头文件中函数的声明:

class CSDI1View : public CView
{
// Operations
public:
    void CStringArrayHandler(CStringArray arr);   // <<<<===================

这是我得到的错误的全文:

错误 1 ​​错误 C2248:“CObject::CObject”:无法访问在类中声明的私有成员 >“CObject”c:\program files (x86)\microsoft visual studio 12.0\vc\atlmfc\include\afxcoll.h 590 1 >SDI-1

【问题讨论】:

  • 尝试通过引用将数组传递给 CStringArrayHandler。

标签: c++ visual-studio-2013 mfc compiler-errors cstring


【解决方案1】:

您通过值传递CStringArray arr,因此CStringArray 的复制构造函数必须是可访问的。但事实并非如此,因为CStringArray 继承自 CObject,后者禁止复制(这就是编译器错误消息,实际上您并没有完全粘贴到此处)

解决办法是通过引用传递arr

void CStringArrayHandler(const CStringArray& arr);

【讨论】:

  • 我发布的错误文本都是VS2013给我的。谢谢,我试试这个
  • @user134788 好吧,我手头没有VS,但我的印象是它至少应该打印出无法访问的构造函数签名,即CObject(const CObject&amp;)
  • 虽然我想实际操作通过引用传递的 CStringArray。我不能用 const 做到这一点。即使尝试使用 CArray 似乎也有同样的问题。 :(
  • @OzairKafray 也许值得问一个新问题?
猜你喜欢
  • 2011-09-06
  • 2013-04-24
  • 2015-05-05
  • 1970-01-01
  • 2013-07-28
  • 2017-04-20
  • 1970-01-01
  • 2015-09-05
  • 2014-08-07
相关资源
最近更新 更多