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();

CStringArray関数内でへの参照を返しているにもかかわらずGetArray()、配列のコピーが上記の行で作成されています。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 に答える