'CObject :: CObject': не может получить доступ к закрытому члену, объявленному в классе 'CObject'd: \ program files \ microsoft visual studio 9.0 \ vc \ atlmfc \ include \ afxcoll.h - PullRequest
0 голосов
/ 24 марта 2011

Эта ошибка возникает при попытке отправить экземпляр CTypedPointerList в параметре функции из одного класса в другой класс.

Как решить эту проблему?

Вот мой код

ObjectList.h

#pragma once
#include "LogData.h"
typedef  CTypedPtrArray<CPtrList , CLog *> CLogData;
class CObjectList
{
    public:

CLogData m_logData;
    public:
CObjectList();
CLogData GetLog();
};

ObjectList.cpp

#include "stdafx.h"
#include "LogData.h"

CObjectList::CObjectList()
{
}

CLogData CObjectList::GetLog()
{
return m_logData;
}

С уважением,

karthik

1 Ответ

3 голосов
/ 24 марта 2011

Мне нужно было бы увидеть ваш код, чтобы быть уверенным, но похоже, что вы пытаетесь передать CTypedPointerList по значению. Это означает, что необходимо создать копию экземпляра, то есть неявный вызов конструктора копирования. Авторы CTypedPointerList пометили конструктор копирования как закрытый, чтобы указать, что копии этого класса не могут быть сделаны.

Попробуйте передать по ссылке (возможно, по константной ссылке?). Если вам действительно нужна копия, вам может потребоваться сделать это вручную.

EDIT

Ааа ... вы используете экземпляр в качестве возвращаемого значения. Метод GetLog () возвращает копию экземпляра, и, поскольку экземпляр не может быть скопирован, он не компилируется. Я ожидаю, что вы действительно хотите сделать, это вернуть константную ссылку на экземпляр. Это означает, что клиент получит доступную только для чтения ссылку на журнал, копия не создается. Для этого измените тип возвращаемого значения GetLog() на const CLogData & в файлах h и cpp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...