2011-11-06 3 views
1

클래스를 CData으로 만들고이를 serialize해야하므로 CObject에서 파생되었습니다.직렬화를 위해 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> 유형의 벡터를 사용합니다. vecData.push_back(Data) (Data는 CData 유형 임)을 사용하여 프로그램의 런타임 중에 새로운 CData 객체를 벡터에 추가합니다.

그러나 나는 내가 다음과 같은 오류가이 문제를 컴파일 할 때 : 나는 조금을 검색하고 비 복사 가능한이나 뭐 같은 일하기 위해 CObject 수준과 관련이있다 것을 발견

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

이!?!? ...

누구든지이 문제를 해결하는 방법을 알고 있습니까?

답변

2

CObject은 복사 생성자를 private으로 선언하므로 클래스에 대한 복사 생성자 (및 할당 연산자 오버로드)를 직접 구현해야합니다. CObject constructor documentation의 답변 :

The standard C++ default class copy constructor does a member-by-member copy. The presence of the private CObject copy constructor guarantees a compiler error message if the copy constructor of your class is needed but not available. You must therefore provide a copy constructor if your class requires this capability.

이 정보가 도움이되기를 바랍니다.

0

.cpp 파일에 IMPLEMENT_SERIAL을 잊어 버리셨습니까?

+0

아니요 ... CObject construcotr에 관한 내용을 읽었습니까? – Incubbus

관련 문제