Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Смена иконки окна - C++ https://www.cyberforum.ru/ cpp-beginners/ thread1619327.html
Я начинающий программист и только учусь C++ - я скачал DevC++ и создал программу типа MDI File Editor с помощью встроенного шаблона - решил начать с этого... Все работает но у меня есть иконка...
C++ Цикл поиска позиции нужного элемента
Доброго времени суток. Некоторые проблемы с программой. Работает правильно - генерирует массив с заданными пользователем строками и столбцами, в которых генерируется диапазон чисел, заданных также...
C++ Работа со строками Приветствую, друзья-программисты. Дали в универе лабу по строкам. У нас выпала лекция и сказали самостоятельно изучить. Прочитал много информации по строкам, но так и не понял как написать. Помогите... https://www.cyberforum.ru/ cpp-beginners/ thread1619308.html C++ Какие методы и перегруженные операторы поддерживает std::set? Предназначение шаблонного класса.Какие методы и перегруженные операторы он поддерживает? Пример кода https://www.cyberforum.ru/ cpp-beginners/ thread1619306.html
C++ Нужна работающая реализация хеш-функций ГОСТ - Blake или Blake2
Доброго времени суток! Возможно, вопрос тупой и не по теме, но может кто-нибудь поможет. Нужна работающая реализация хеш-функций ГОСТ (чем новее, тем лучше) - Blake или Blake2. Весь гугл...
C++ В заданном предложении найти слово, имеющее наибольшее число вхождений https://www.cyberforum.ru/ cpp-beginners/ thread1619279.html
Среди слов заданного предложения, которые не является сериями, найти такое, которое имеет наибольшее число вхождений в предложение. P.S. ОБЯЗАТЕЛЬНО В любом блоке программы необходимо использовать...
C++ Исследование кодов исправляющих ошибки https://www.cyberforum.ru/ cpp-beginners/ thread1619275.html
Дана тема: программирование и исследование кодов, исправляющие ошибки. Киньте теорию или у кого, что-нибудь есть. (алгоритм) или объясните.
Постройте грамматику для описания цепочек из нулей и единиц C++
Задание такое: дана цепочка вида- сколько единиц,столько за следом нулей(110010-верная,11101100-неверная)максимум 2 раза может быть отношение нулей и единиц(то есть 11001010-не может быть(это просто...
C++ Заменить последовательности символов табуляции (\t) в начале каждой строки на пробелы 2)Заменить последовательности символов TAB ('\t') в начале каждой строки на пробелы. Количество пробелов, соответствующих одному TAB передавать параметром. Должна быть реализована отдельная... https://www.cyberforum.ru/ cpp-beginners/ thread1619248.html C++ Найти первое вхождение слова в текст https://www.cyberforum.ru/ cpp-beginners/ thread1619247.html
Здравствуйте, помогите пожалуйста написать 2 программы, связанные со строками: 1)Даны две строки, которые назовём текст и слово, а также символ c. Требуется найти первое с начала текста вхождение...
Интервал в булевом пространстве C++
интервал в булевом пространстве размерности N задан своими максимальными и минимальными элементам. Вывести соответствующий интервалу троичный вектор ( 1011 , 1000-->10--). Нужна помощь , даже не...
C++ Найти и исправить ошибки в коде https://www.cyberforum.ru/ cpp-beginners/ thread1619233.html
Не могу понять почему не работает программа: #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL, "Rus"); ...
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 17
0

Не могу вывести объекта класса из файла - C++ - Ответ 8516718

20.12.2015, 14:54. Показов 493. Ответов 2
Метки (Все метки)

Всем доброго времени суток! Не могу вывести объект класса из файла, когда записываю из файла в объект класса, почему то не может прочитать поле со строкой Name, а поле Year с числами читает. Помогите плиз.
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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
class Manip {
int a;
public:
    Manip(int n);
    friend ostream&operator<<(ostream&os, Manip A);
};
Manip::Manip(int n) {
a = n;
};
 
ostream& operator<<(ostream&os, Manip A) {
   os<<"\t";
   return os;
};
 
class Organization {
protected:
    char *Name;
    int Year;
public:
    Organization();
    Organization(char* name, int year);
    Organization(const Organization &B);
    void Set_N(char* name);
    void Set_Y(int name);
    char* Get_N();
    int Get_Y();
    void Add();
    void Show();
    Organization &operator=(const Organization &B);
    friend istream &operator>>(istream&is, Organization &A);
    friend ostream &operator<<(ostream&os,const Organization &A);
    friend ofstream &operator<<(ofstream &of, Organization &A);
    friend ifstream &operator>>(ifstream &ifs, Organization &A);
    ~Organization();
};
 
Organization::Organization() {
Name = new char[1];
Name[0] = '\0'; 
Year = 0;
};
 
Organization::Organization(char* name, int year) {
Name = new char[strlen(name)+1];
strcpy(Name, name);
Year = year;
};
 
Organization::Organization(const Organization &B) {
    Name = new char[strlen(B.Name+1)];
    strcpy(Name, B.Name);
    Year = B.Year;
};
 
void Organization::Set_N(char* name) {
Name = new char[strlen(name)+1];
strcpy(Name, name);
};
 
void Organization::Set_Y(int year) {
Year = year;
};
 
char *Organization::Get_N() {
return Name;
};
 
int Organization::Get_Y() {
return Year;
};
 
 
void Organization::Show() {
    if (Name[0]!='\0')
    cout<<" Имя организации: "<<Name<<" Год основания: "<<Year<<endl;
    else cout<<"Объект не инициализирован."<<endl;
};
 
Organization &Organization::operator=(const Organization &B) {
if (this != &B) {
    Name = new char[strlen(B.Name) + 1];
    Year = B.Year;
}
return *this;
};
 
istream&operator >>(istream&is, Organization &A) {
cout<<"Введите имя организации: ";
is>>A.Name;
cout<<"Введите год основания: ";
while (true) {
    is >> A.Year;
    if (cin.good() && A.Year > 0 && A.Year < 2016)
    {
        cin.ignore(10, '\n');
        break;
    }
    is.clear();
    cout<<"Введены не корректные данные, повторите ввод.";
    is.ignore(10, '\n');
}
return is;
};
 
ostream &operator << (ostream &os, const Organization &A) {
    if (A.Year !=0 && A.Name[0]!='\0') {
        os<<"Название организации: "<<A.Name<<" Год основания:"<<A.Year;
    }
    else {
        os<<Manip(1)<<"Пусто"<<endl;
    }
    return os;
 
};
 
ofstream &operator << (ofstream &of, Organization &A) {
    if (!of.is_open()) cout<<"Не смогли открыть файл."<<endl;
        else
    of.write(reinterpret_cast<char*>(&A), sizeof(Organization));
    return of;
};
 
ifstream &operator >> (ifstream &ifs, Organization &A) {
    ifs.read(reinterpret_cast<char*>(&A), sizeof(Organization));
    return ifs;
};
 
Organization::~Organization() {
cout<<"Вызван деструктор."<<endl;
};
 
void Add_File(ofstream &of, Organization A[], int size) {
    of.open("file1.txt", ios::binary | ios::out | ios::app);
    for (int i = 0; i < size; i++)
        of << A[i];
    of.close();
    cout<<"Запись произошла успешно.";
};
 
void Show_file(ifstream &ifs) {
    int fsize, count;
    Organization Temp;
    ifs.open("file1.txt", ios::binary | ios::in);
    try {
    if (!ifs) throw 1;
    ifs.seekg(0, ios::end);
    fsize = ifs.tellg();
    count = fsize/sizeof(Organization);
    ifs.seekg(0, ios::beg);
    //Temp = new Organization[count];
    for (int i = 0; i < count; i++) {
        ifs >> Temp;
        cout << Temp;
    }
    /*for (int i = 0; i < count; i++)
        cout<<i+1<<")"<<Temp[i]<<endl;
    ifs.close();*/
    }
    catch(int) {
    cout<<"Ошибка. Файл не открыт."<<endl;
    ifs.close();
    }
};
 
void Delete(ifstream &ifs, ofstream &of) {
    int n, fsize, count;
    Organization Temp;
    of.open("Temp.txt", ios::binary | ios::out);
    ifs.read("file1.txt", ios::binary | ios::in);
    fsize = ifs.tellg();
    count = fsize/sizeof(Organization);
    cout<<"Введите номер удаляемого объекта."<<endl;
    cin>>n;
    n--;
    for (int i = 0; i < count; i++) {
        ifs >> Temp;
        if (i != n) {
            of.write((char*)&Temp, sizeof(Organization));
        }
    }
    ifs.close();
    of.close();
    remove("file1.txt");
    rename("temp.txt", "file1.txt");
    remove("temp.txt");
};
 
void Change(ifstream &ifs, ofstream &of) {
    Organization Temp;
    int num;
    cout<<"Введите номер изменяемого объекта.";
        cin>>num;
        num--;
    ifs.open("file1.txt", ios::binary, ios::in);
        ifs.seekg(num*sizeof(Organization), ios::beg);
        ifs >> Temp;
        cin >> Temp;
    ifs.close();
    
    of.open("file1.txt", ios::binary, ios::out);
        of.seekp(num*sizeof(Organization), ios::beg);
        of << Temp;
    of.close();
};
 
int main() {
    setlocale(LC_ALL, "Rus");
    Organization *A;
    int size;
    ifstream ifs;
    ofstream of;
    cout<<"Введите размер массива:";
    cin >> size;
    A = new Organization[size];
    for (int i = 0; i < size; i++) {
        cin >> A[i];
        cout << A[i]; 
    }
    cout<<"Ввод данных в файл...";
       Add_File(of, A, size);
    
    cout<<"Вывод данных :"<<endl;
       //ifs.open("file1.txt", ios::binary, ios::in);
       Show_file(ifs);
 
    cout<<"Удаление из файла:"<<endl;
       Delete(ifs, of);
       Show_file(ifs);
 
    cout<<"Изменение элемента в файле:"<<endl;
       Change(ifs, of);
       Show_file(ifs);
};
Добавлено через 55 минут
Когда в функции Show_file записываем данные из файла в объект Temp, и когда Temp выводим на экран в функции где мы перегружаем оператор вывода ostream << , не может прочитать поле Name из Temp. Почему? Помогите пожалуйста(

Добавлено через 1 час 35 минут
Сначала записываю объект типа Organization в файл потом ее же хочу вывести из файла, и проблема с выводом( Проблема в фунцкиях которые начинаются со строк 106 и 141.

Вернуться к обсуждению:
Не могу вывести объекта класса из файла C++
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2015, 14:54
Готовые ответы и решения:

Вызвать процедуру\функцию из другого объекта\класса. Из одного класса\объекта сделать два
Здравствуйте. Подскажите что не правильно делаю, и возможно ли вообще - вызвать процедуру\функцию...

Десериализация объекта C# класса из файла
Добрый день, уважаемые коллеги. Прошу совета Есть бинарный файл, в котором существует...

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

Считывание из файла значений в переменные объекта класса
Предположим, что есть некий класс const int n=10; class Example { private: int id,number;...

2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2015, 14:54
Помогаю со студенческими работами здесь

Запись и чтение объекта класса в файл и из файла
У меня есть std::list состоящий из объектов типа Person это база о людях. Нужно реализовать два...

Открытие файла через объекта класса fstream
Есть функция: bool Lr::MakeFile() { string name, fullname; cout &lt;&lt;&quot;Введите имя нового...

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

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

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