Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Serialize();


Автор: DigitSphinx 21.9.2007, 22:44
Раньше не работал со зверем по имени “serialize” .
Пишу программу типа картотеки студентов.
CStudent.h :
Код

class CStudent : public CObject
{
    DECLARE_SERIAL( CStudent )
public:    
    
    CStudent(void);
    ~CStudent(void);
    void Serialize(CArchive & ar);
    void Print(std::ostream & strm);
    void Read(std::istream & strm);
    void Create(string stName, int stGroup);
    string Name;
    int Group;
};

в цппешнике
Код

IMPLEMENT_SERIAL(CStudent, CObject, 1)

И функция serialize
Код

void CStudent::Serialize(CArchive & ar )
{
    CObject::Serialize( ar );
    if( ar.IsStoring())
        ar << Name << Group;
    else
        ar >> Name >> Group;
}

Это все что нашел в инете, там про ошибки не сказанно

А ошибки такие :
Цитата

error C2678: binary '<<' : no operator found which takes a left-hand operand of type 'CArchive' (or there is no acceptable conversion)

и
Цитата

error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)

и если эти операторы надо переопределять, то почему я этого нигде не прочитал ?

Автор: DigitSphinx 21.9.2007, 23:01
Поменял string на CString и все работает

Автор: zkv 21.9.2007, 23:16
Цитата(DigitSphinx @  21.9.2007,  23:01 Найти цитируемый пост)
Поменял string на CString и все работает 

правильно, разработчики не озаботили себя перегрузкой << и >> для std::string
можно делать самостоятельно, например через тот же CString
Код

static CArchive &operator<<( CArchive &ar, const std::string &str )
{
    CString tmp = str.c_str();
    ar<<tmp;
    return ar;
}

static CArchive &operator>>( CArchive &ar, std::string &str )
{
    CString tmp;
    ar>>tmp;
    str = tmp;
    return ar;
}

но этот пример не назовешь эффективным решением. 
Если интересно поробуй свое организовать через методы Read/Write класса CArchive.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)