Извлечение из CObject для сериализации приводит к ошибке компиляции для доступа - PullRequest
1 голос
/ 06 ноября 2011

Я создал свой класс CData и извлек его из CObject, потому что мне нужно его сериализовать.

class CData : public CObject
{
    DECLARE_SERIAL(CData);
public:
    CData();
    virtual ~CData();
    virtual void Serialize(CArchive& ar);

    //Data
    CString m_strName;
    ULONG m_ulID;
    CString m_strCorps;
    CPoint m_Coordinate;
    short m_sStatus;
};

И я использую вектор типа vector<CData> в своем классе документов. Я добавляю новые CData-объекты в вектор во время выполнения программы, используя vecData.push_back(Data) (где Data имеет тип CData).

Но когда я пытаюсь скомпилировать это, я получаю следующую ошибку:

ошибка C2248: 'CObject :: CObject': не может получить доступ к приватному члену объявлен в классе 'CObject'

Я немного искал и обнаружил, что это связано с тем, что CObject-класс не подлежит копированию или что-то подобное!

Кто-нибудь знает, как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

CObject объявляет конструктор копирования как private, поэтому вам нужно самостоятельно реализовать конструктор копирования (и перегрузку оператора присваивания) для вашего класса. CObject документация конструктора гласит:

Стандартный конструктор копирования класса C ++ по умолчанию выполняет копирование по элементам. Наличие закрытого конструктора копии CObject гарантирует сообщение об ошибке компилятора, если конструктор копирования вашего класса необходим, но недоступен. Поэтому вы должны предоставить конструктор копирования, если ваш класс требует этой возможности.

Надеюсь, это поможет!

0 голосов
/ 06 ноября 2011

Вы случайно не забыли IMPLEMENT_SERIAL в .cpp-файле?

...