Форум программистов, компьютерный форум CyberForum.ru

Ошибка сохранения/загрузки объекта с файла - C++

Восстановить пароль Регистрация
 
Bretbas
22 / 17 / 1
Регистрация: 05.08.2013
Сообщений: 468
Завершенные тесты: 1
25.05.2014, 22:17     Ошибка сохранения/загрузки объекта с файла #1
Привет всем. Столкнулся с проблемой сохранения/загрузки объекта в/из файла. Вытащил из моего проекта куски кода, и создал новый проект, чтобы легче было показать где именно траблы.

Итак, сейчас я расскажу как все у меня работает:

У меня есть 3 абстрактных класса - Model,View,Controller.

Model - это сущность данных, является субъектом. За любые изменения в Model следят объекты(наблюдатели) класса View. Подписаться на наблюдение можно с помощью метода add_observer(View*).
View - является классом, объекты(наблюдатели) которого, следят за изменениями в Model.
Controller - является классом определяющий виртуальную функцию execute() для переопределения в классах-потомках.(шаблон Command)

Ну собственно стандартный каркас MVC.

Теперь сама задача. Есть еще 3 класса - ModelMap,ViewMap,ControllerMap.

ModelMap - потомок класса Model. Создает сущность о карте. Имеет такие данные как Ширина, Высота и Двумерный массив.
ViewMap - потомок класса View. Любые изменения в ModelMap возвещают ViewMap на отображение карты.
ControllerMap - потомок класса Controller. Переопределяет функцию execute() своего родителя, и по ее вызову намеренно вызывает отображение карты класса ViewMap.

Ну вроде все работает, и я могу видеть карту на своем экране вот таким образом:

C++
1
2
3
4
5
6
...
ModelMap*       model_map           =   new ModelMap(10,10);
ViewMap*        view_map            =   new ViewMap(model_map);
ControllerMap*  controller_map      =   new ControllerMap(model_map);
                controller_map      ->  execute();
...
Но вопрос возник в другом. Как мне сохранять и загружать карту с файла? Я решил сохранять и загружать только модель карты, а вид и контроллер инициализировать после. Но выходит какая-то ошибка при загрузки. Вот мой файл Main.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
 
#include "ControllerMap.h"
#include "ModelMap.h"
#include "ViewMap.h"
 
using namespace std;
 
 
ModelMap*       model_map;
ViewMap*        view_map;
ControllerMap*  controller_map;
 
void load()
{
    std :: fstream f_;
    f_.open(L"FILE.BAT",std :: ios :: in | std :: ios :: binary);
    model_map       =   new ModelMap(10,10);
    f_.read(reinterpret_cast<char*>(model_map),sizeof(ModelMap));   
    f_.close();
 
    view_map        =   new ViewMap(model_map);
    controller_map  =   new ControllerMap(model_map);
 
}
 
 
void save()
{
 
    std :: fstream f_;
    f_.open(L"FILE.BAT",std :: ios :: out | std :: ios :: binary);
    f_.write(reinterpret_cast<char*>(model_map),sizeof(ModelMap));
    f_.close();
}
 
 
 
int main()
{
    model_map       =   new ModelMap(10,10);
    view_map        =   new ViewMap(model_map);
    controller_map  =   new ControllerMap(model_map);
 
    controller_map -> execute();
    getch();
 
    char q;
    cout << "s - save; l - load";
    cin >> q;
 
    switch(q)
    {
    case 's': { save(); cout << "saved"; } break;
    case 'l': { load(); controller_map -> execute(); } break;
    }
 
    getch();
 
    return 0;
}
Функцией save() я сохраняю мою модель карты. И все здорово сохраняется.
Функцией load() я пытаюсь загружать мою карту, но выходит ошибка на строке инициализации вида(view_map = new ViewMap(model_map) после загрузки, хотя при отладке все данные, такие как Ширина, Высота и тд считываются с файла.

В чем проблема может быть? У меня были мысли что это из-за того, что при сохранении карты, сохраняется так же и вектор наблюдателей, который находится в классе родителе Model. А если сохранять вектор указателей, то кроме как сериализация ничего больше не поможет на сколько я знаю.
Так как же быть? Я пробовал перед сохранением карты удалять вид(delete view_map), чтобы уничтожить вектор в Model... но ничего не помогает.

Помогите пожалуйста. Как обойти все это? Как сохранить и загрузить карту в моем проекте?

Добавлено через 9 минут
блин,забыл сам проект выложить,тогда только завтра(
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.05.2014, 00:25     Ошибка сохранения/загрузки объекта с файла #2
эээ...незя так сохранять.
надо сохранять/загружать только данные, а не объекты. либо использовать библиотеки для сериализации - boost::serialization например
Bretbas
22 / 17 / 1
Регистрация: 05.08.2013
Сообщений: 468
Завершенные тесты: 1
26.05.2014, 00:57  [ТС]     Ошибка сохранения/загрузки объекта с файла #3
почему нельзя сохранять?к примеру есть объект с данными int,char,bool. рази я не смогу его сохранить?у меня сохранялось так
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.05.2014, 01:03     Ошибка сохранения/загрузки объекта с файла #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Bretbas Посмотреть сообщение
к примеру есть объект с данными int,char,bool. рази я не смогу его сохранить?
это данные, их можно сохранить, но как только появляется наследование и виртуальные функции класс перестает быть просто данными и потому такое сохранение не канает
Bretbas
22 / 17 / 1
Регистрация: 05.08.2013
Сообщений: 468
Завершенные тесты: 1
27.05.2014, 01:17  [ТС]     Ошибка сохранения/загрузки объекта с файла #5
спасибо)сделано)
Yandex
Объявления
27.05.2014, 01:17     Ошибка сохранения/загрузки объекта с файла
Ответ Создать тему
Опции темы

Текущее время: 04:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru