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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегрузка операторов ( класс CMyString ) где-то ошибка http://www.cyberforum.ru/cpp-beginners/thread1187983.html
#include <iostream> #include <cstring> #include<conio.h> using namespace std; class CMyString {
C++ Сортировка на 3 лентах Помогите понять алгоритм сортировки на 3 лентах (простым слиянием). Спасибо. http://www.cyberforum.ru/cpp-beginners/thread1187978.html
C++ Нужно написать кроссворд
Нужно написать кроссворд .я так понимаю из 2 мерных символьных массивов один массив с готовыми словами в другой водит данные пользователь .пользователь водит данные по координатной сетке и цыкл проверяет правильность вода символов с годовым месивом.
Дерево достижимости. Сети Петри C++
Нужно создать метод, который выводит дерево достижимости в Treeview для заданной маркировки. Прилагаю схему, немного корявую. Помогите только метод написать! Наработок никаких не выкладываю, ничего не работает так как нужно. Заранее спасибо ! ...
C++ Быстро исчезает консоль http://www.cyberforum.ru/cpp-beginners/thread1187945.html
Среда разр. VS 2012 Так вот,после завершения кода сразу закрывается консоль,как быть? В прежних версия была надпись нажмите клавишу для продолжения,теперь ее нет... вот на примере простого кода: #include<iostream>; #include<math.h>; using namespace std; int main() { int s=55; cout<<s<<endl;
C++ Нахождение константы Бернштейна численным интегрированием Здравствуйте, не могли бы помочь усовершенствовать задачку. Нужно написать на С++, с которым, к сожалению, знакомство только предстоит. Нужно найти константу Бернштейна численным интегрированием: \frac{||\sum\limits_{k=0}^{m_n-1}a_k k^r \chi_k||_p}{m_n^r||\sum\limits_{k=0}^{m_n-1}a_k\chi_k||_p} Отрезок uses SysUtils; var m:array of longint; //массив чисел m_k a:arrayof extended;... подробнее

Показать сообщение отдельно
Bretbas
181 / 40 / 5
Регистрация: 05.08.2013
Сообщений: 673
Завершенные тесты: 1

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

25.05.2014, 22:17. Просмотров 295. Ответов 4
Метки (Все метки)

Привет всем. Столкнулся с проблемой сохранения/загрузки объекта в/из файла. Вытащил из моего проекта куски кода, и создал новый проект, чтобы легче было показать где именно траблы.

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

У меня есть 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 минут
блин,забыл сам проект выложить,тогда только завтра(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru