Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Serialize(); Не могу разобраться ! 
V
    Опции темы
DigitSphinx
Дата 21.9.2007, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3



Раньше не работал со зверем по имени “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)

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



--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
DigitSphinx
Дата 21.9.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 28.4.2007
Где: Москва

Репутация: нет
Всего: 3



Поменял string на CString и все работает


--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
zkv
Дата 21.9.2007, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(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.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0420 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.