7

我试图返回一个 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'
4

1 回答 1

7

问题出在这条线上

CStringArray LastUsedDes = cqueue.GetArray();

即使您CStringArrayGetArray()函数中返回对 的引用,也会在上面的行中创建数组的副本。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
于 2012-08-07T01:55:55.473 回答