Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сериализация в MFC  
V
    Опции темы
Vaz007
Дата 8.9.2013, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день. 
Пытаюсь разобраться с сериализацией в MFC .
Имеются классы:
Код

class Student
:public CObject // наследую от CObject
{
    private:
        std::string name; 
        CString c_name; // использую для того чтобы считать//записать данные из/в файл
        int age;

    public:
        DECLARE_SERIAL( Student); // написал макрос
        virtual void Serialize( CArchive& archive );// переопределил функцию
        Student();// конструктор по умолчанию есть
        virtual ~Student();
        Student(std::string n,int a ) : name(n),age(a)
        {}
        void setName(std::string s){ c_name = s.c_str();}
        virtual std::ostream & Show(std::ostream &,Student*);
        virtual std::istream & Enter(std::istream &,Student *);
            friend std::ostream & operator<<(std::ostream & ,Student *);
            friend std::istream & operator>>(std::istream & ,Student *);        
};



Код

//в cpp
IMPLEMENT_SERIAL( Student, CObject, 1); // написал макрос

void Student::Serialize(CArchive & archive )
{
    CObject::Serialize( archive );
    
    if( archive.IsStoring() )
    {
        Student::setName(name);
        archive << c_name << age;
    }
    else
    {
        archive >> c_name>>age;
        CT2CA pszConvertedAnsiString (c_name);
        std::string nu(pszConvertedAnsiString);
        name = nu;
    }
}


class Groupa
{
    private:
        std::vector < std::shared_ptr<Student> > group;
    public:
        void Add(S *);
        void Show();
        void Clear();
        void Read(CArchive & ar);
        void Write(CArchive & ar);
        bool isEmpty(){return group.size() == 0;};
        Groupa();
        ~Groupa();
};

void Groupa::Read(CArchive & ar)
{
    Clear();
    S *p;
    int f_size=0;
    ar >>f_size; // считывает какое то огромное число , не то ,что я записал в файле //дальше уже цикл неправильный
    for(int i=0;i<f_size;++i)
    {
        p = new S;
        Add(p);
        group[i]->Serialize(ar);
    }
    std::cout <<"Group read from file!!"<<std::endl;
}

void Groupa::Write(CArchive & ar)
{
    ar <<group.size();
    for(auto Iter = group.begin();Iter!=group.end();++Iter)
        (*Iter)->Serialize(ar);
    std::cout <<"Group write in file!!"<<std::endl;
}



Вот сама программа( пытаюсь считать из файла) :
Код

                   Groupa group;
            Student *p = new Student;
            cin >>p;
            group.Add(p);
            CFile f;
            CFileException e;
            TCHAR* pszFileName = _T("s.txt");
            if(!f.Open(pszFileName, CFile::modeRead, &e))
            {
                TRACE(_T("File could not be opened %d\n"), e.m_cause);
            }
            else
                {
                CArchive archive(&f, CArchive::load);
                group.Read(archive);
                archive.Close();
                f.Close();
                }

Что я делаю неправильно , скажите пожалуйста.
Отладка на фотках:

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  1.jpg 57,40 Kb
PM MAIL Jabber   Вверх
Vaz007
Дата 8.9.2013, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



фото2

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  2.jpg 48,17 Kb
PM MAIL Jabber   Вверх
Vaz007
Дата 8.9.2013, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



фото3

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  3.jpg 42,92 Kb
PM MAIL Jabber   Вверх
Vaz007
Дата 9.9.2013, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



файл был записан не в том формате
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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