0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 4
1

Ошибка при чтении объекта класса из файла

20.06.2018, 21:16. Показов 779. Ответов 6
Метки нет (Все метки)

Долго я пытался решить проблему самостоятельно, а так же и искал ответы на форумах. Но в итоге не смог решить свою проблему.

Проблема в том, что я сохраняю свой класс в файл, и потом после перезапуска программы, когда в файле уже есть данные, то при компиляции идет логическая ошибка при чтении файла.



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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#include<iostream>
#include<windows.h>
#include<fstream>
#include<conio.h>
 
using namespace std;
 
 
 
class Player{
public:
    Player(){
        age =  exp = 0;
        name = "player";
        level = 1;
        balance = 3000;
        HP = 100;
        nxtLvl = 500;
        damage = 150;
    }
    Player(int age, string name):Player(){
        this->age = age;
        this->name = name;
    }
    Player(const Player &obj){
        age = obj.age;
        name = obj.name;
        level = obj.level;
        balance = obj.balance;
        HP = obj.HP;
        nxtLvl = obj.nxtLvl;
        damage = obj.damage;
        exp = obj.exp;
    }
    string getName(){return name;}
    int getAge(){return age;}
    int getLevel(){return level;}
    int getHP(){return HP;}
    int getBalance(){return balance;}
    int getNxt(){return nxtLvl;}
    int getDamage(){return damage;}
    void printHero(){
        cout << name << " " << age << " лет.\n" << level << " lvl.\n"
        << "Бабки: " << balance << "$\nЗдоровье: " << HP << " ХП\n" << "Сила удара: максимум " << damage << "\nОпыт: " << exp << "/" <<nxtLvl << "\n";
    }
    void upLevel(){
        ++level;
        nxtLvl = nxtLvl * 2 + (nxtLvl/2);
        damage += (damage/10);
        }
    void addExp(int exp){this->exp += exp;}
    void addHealth(int health){HP += health;}
    void remHealth(int health){HP -= health;}
    void addDamage(int damage){this->damage += damage;}
private:
    int age, level, balance, HP, exp, nxtLvl, damage;
    string name;
};
 
void Arena();
void myHero();
void Shop();
main(){
    setlocale(LC_ALL, "rus");
 
    Player me;
 
    string path = "game_saves.txt";
    ofstream fout;
    fout.open(path, ofstream::app);
    fout.close();
 
    ifstream fin;
    fin.open(path);
 
    if(!fin.read((char*)&me, sizeof(Player))){
        cout << "Введите ваше имя:\n";
        string name;
        cin >> name;
        system("cls");
        cout << "Введите сколько вам лет:\n";
        int age;
        cin >> age;
        me = Player(age, name);
        ofstream fout;
        fout.open(path);
        fout.write((char*)&me, sizeof(Player));
        fout.close();
    }
    fin.close();
    system("cls");
     //int l; cin >> l;
    cout << "Hello " << me.getName() << "!\n";
 
    cout << ">Новая игра\n Продолжить игру\n";
    char c;
    int choose = 1;
    while(c != 13){
        c = _getch();
        if(c == 72){
            system("cls");
            cout << "Hello " << me.getName() << "!\n";
            cout << ">Новая игра\n Продолжить игру\n";
            choose = 1;
        }
        if(c == 80){
            system("cls");
            cout << "Hello " << me.getName() << "!\n";
            cout << " Новая игра\n>Продолжить игру\n";
            choose = 2;
        }
    }
    if(choose == 1){
        system("cls");
        cout << "Введите ваше имя:\n";
        string name;
        cin >> name;
 
        cout << "Введите сколько вам лет:\n";
        int age;
        cin >> age;
        ofstream fout;
        fout.open(path);
        fout.write((char*)&me, sizeof(Player));
        fout.close();
    }
    else{
        system("cls");
        cout << ">Арена\n Мой герой\n Магазин\n";
        char k='a';
        char vote = 1;
        while(k != 13){
            k = _getch();
            if(k == 72){
                system("cls");
                if(vote == 2){
                    cout << ">Арена\n Мой герой\n Магазин\n";
                    vote = 1;
                }
                if(vote == 3){
                    cout << " Арена\n>Мой герой\n Магазин\n";
                    vote = 2;
                }
            }
            if(k == 80){
                system("cls");
                if(vote == 1){
                    cout << " Арена\n>Мой герой\n Магазин\n";
                    vote = 2;
                }
                else{
                    cout << " Арена\n Мой герой\n>Магазин\n";
                    vote = 3;
                }
            }
        }
      /* if(vote == 1) Arena();
        if(vote == 2) myHero();
        if(vote == 3) Shop();*/
 
    }
 
}
Буду рад помощи. Прошу не ругаться, я начал изучать ООП и работу с файлами только позавчера.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2018, 21:16
Ответы с готовыми решениями:

Ошибка при чтении нескольких объектов класса из файла
Добрый день! Пытаюсь считать данные из файла в объект класса, одну строку считывает, а дальше...

Ошибка при вызове метода класса, при чтении из файла
добрый день, пытаюсь считать данные из и запихнуть их в список в файле у меня вот такие данные...

Появляется ошибка "Ссылка на объект не указывает на экземпляр объекта" при чтении файла
Начало файла выглядит так: №телефона,Фамилия,Имя,Отчество,Индекс,Город,Улица,Дом,Квартира...

Ошибка в чтении класса из файла в переменную-буфер
Я написал программу, суть которой заключается в следующем: dat файл заполняется объектами класса...

6
473 / 425 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
20.06.2018, 21:34 2
Цитата Сообщение от Maksimktl Посмотреть сообщение
fout.open(path, ofstream::app);
fout.close();
Это круто...нафига?
C++
1
2
3
if(!fin.read((char*)&me, sizeof(Player)))
{ ... }
fin.close();
Окей, а если файл не открылся, а ты его раз, и закрыл.. а закрыл что? Знал бы кто... - exception.

string писать в бинарь - провальное дело. Да еще и файл открывается как текстовый, а не бинарный, модификатор добавляй ios::binary
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
20.06.2018, 21:34 3
Файл текстовый, что ли? Ты его как создал? В Блокноте?
0
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 4
20.06.2018, 21:38  [ТС] 4
А как добавлять модификатор ios::binary ?
0
473 / 425 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
20.06.2018, 21:41 5
Цитата Сообщение от Maksimktl Посмотреть сообщение
А как добавлять модификатор ios::binary ?
C++
1
2
fout.open(path, ios::app | ios::binary);
fin.open(path, ios::binary);
Как пример.
0
0 / 0 / 0
Регистрация: 16.01.2017
Сообщений: 4
20.06.2018, 22:06  [ТС] 6
Проблема решена. Оказывается я сохранял в файл string, а надо было вместо него делать масив char.
0
473 / 425 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
21.06.2018, 19:13 7
Maksimktl, Я тебе об этом сообщил во втором посте, как бы)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2018, 19:13
Помогаю со студенческими работами здесь

Ошибка при чтении файла
Необработанное исключение по адресу 0x0FE4172C (msvcp140d.dll) в .exe: 0xC0000005: нарушение прав...

ошибка при чтении из файла
void bin_kn(opisanie *beg_kn, int n, str_f f_kn) { FILE *f = fopen(&quot;books.bin&quot;, f_kn ==...

Ошибка при чтении файла
Добрый вечер. При чтении файла Unhandled Exception: System.OverflowException: Значение было...

Ошибка при чтении файла
Читаю в скрипте файл (размер~25мб) $file = fopen($myfile,&quot;r&quot;); $line =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru