返回一个 CStringArray 会给出错误

Return a CStringArray gives errors

本文关键字:出错 错误 CStringArray 一个 返回      更新时间:2023-10-16

我试图返回一个CStringArray:在我的".h"中,我定义了:

    Private:
    CStringArray array;
    public:
    CStringArray& GetArray();

.cpp我有:

    CQueue::CQueue()
    {
    m_hApp = 0;
    m_default = NULL;
    }

    CQueue::~CQueue()
    {
     DeleteQueue();
    }
    CStringArray& CQueue::GetArray()
    {
     return array;   
    }

从另一个文件中,我正在尝试通过以下方式调用它:

    CStringArray LastUsedDes = cqueue.GetArray();

我想这是因为上面的行,我得到了错误:

   error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'

问题出在这一行

CStringArray LastUsedDes = cqueue.GetArray();

即使您在 GetArray() 函数中返回对CStringArray的引用,也会在上面的行中创建数组的副本。 CStringArray本身没有定义复制构造函数,它派生自CObject,它有一个私有复制构造函数。

将行更改为

CStringArray& LastUsedDes = cqueue.GetArray();

但请注意,LastUsedDes现在引用类实例中包含的相同CStringArray,并且对一个实例所做的任何更改都将在另一个实例中可见。

如果需要返回数组的本地副本,可以使用 Append 成员函数复制内容。

CStringArray LastUsedDes;                // default construct the array
LastUsedDes.Append( cqueue.GetArray() ); // this will copy the contents of the
                                         // returned array to the local array
相关文章: