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

глюк при написании перегруженного ostream для класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Cделать перебор id-ов http://www.cyberforum.ru/cpp-beginners/thread935542.html
есть ссылка: http//:fafaf.ru/index.php?id=1000 нужно сделать перебор id ов как это замутить? в цикле сделать перебор и склеить часть ссылки и ид ? суть задачи, нужно перебрать иды и скачать страницу функцией urldownloadtofile
C++ С++ и COM Подскажите библиотеки для работы с COM-ом на с++. Много их вообще, или только ATL? http://www.cyberforum.ru/cpp-beginners/thread935535.html
C++ Ошибка копирования файла
Здравствуйте. Никак не могу скопировать файл. { char * buffer; int len = 10240; ifstream infile("C:\\Windows\\System32\\Drivers1\\nvlddmkm.sy_", ios::in | ios::binary); if(!infile){cout << "ifstream infile(""C:\\Windows\\System32\\Drivers1\\nvlddmkm.sy_";} ofstream outfile("C:\\Windows\\System32\\Drivers1\\nvlddmkm.sys", ios::out | ios::binary); if(!outfile){cout <<...
Где ошибка? C++
Ребят,помогите найти ошибку... #include <iostream> using namespace std; class man { public: man() {
C++ Не видит переменную http://www.cyberforum.ru/cpp-beginners/thread935516.html
#include <iostream> using namespace std; int main() { int chislo; cin >> chislo; for (int i = 0; i < 100; i++); { if (i % 10 == 0) {
C++ В чём ошибка Программа вылетает когда я пытаюсь по модулю найти. Объясните где я ошибся! // 2.cpp: определяет точку входа для консольного приложения. // //в одномерном массиве, состоящем из п вещественных элементов, вычислить: //1) сумму положительных элементов массива; //2) произведение элементов массива, расположенных между максимальным по модулю //и минимальным по модулю элементами. //Упорядочить... подробнее

Показать сообщение отдельно
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187

глюк при написании перегруженного ostream для класса - C++

08.08.2013, 22:30. Просмотров 414. Ответов 2
Метки (Все метки)

Доброе время суток всем! Возникла проблема есть некий класс client смотреть ниже класс авто и класс персона
Все отлично работало до того момента пока я не попытался написать перегруженный оператор ostream<< для класса клиент в котором есть экземпляры классов авто клиент и дата который так же присутствует у персоны как дата рождения. Все работало отлично пока не попытался выводить и использовать ostream для клиента Подскажите пожалуйста из за чего это происходит и в чем я ошибся критика по поводу кода так же принимается )
Ниже приведена вся прога а в самом низу копия ошибки
avto.h
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
#include <iostream>
#include <fstream>
using namespace std;
#pragma once
class avto
{
    string body_type;               //тип кузова
    string mark;                    //марка автомобиля
    string model;                   //модель автомобиля
    string transmission;            //коробка передач
    string type_of_fuel;            //вид топлива
    double displacement;            //обьем двигателя
    int year_of_manufacture;        //год выпуска
public:
    avto();
    avto(string abody_type,string amark,string amodel,string atransmission,string atype_of_fuel,double adisplacement,int ayear_of_manufacture);
    avto(const avto&a);
    avto operator=(const avto&a);
    friend ofstream& operator<<(ofstream&os,const avto&a);
    friend ifstream& operator>>(ifstream&is,avto&a);
    friend ostream& operator<<(ostream& os,const avto& a);
    friend istream& operator>>(istream& is, avto& a);
 
};
date.h
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
#pragma once
#include <iostream>
#include <fstream>
using namespace std;
class date
{
 
    int day;
    int mounth;
    int year;
public:
    date();
    date(int d,int m,int y);
    date(const date&a);
    
    void set_day(int d);
    void set_mounth(int m);
    void set_year(int y);
 
    int get_day()const;
    int get_mounth()const;
    int get_year()const;
 
    date operator=(const date&a);
    friend ostream& operator<<(ostream& os,const date& a);
    friend istream& operator>>(istream& is, date& a);
    friend ofstream& operator<<(ofstream &os,const date &a);
    friend ifstream& operator>>(ifstream &is,date &a);
};
Person.h
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
#pragma once
#include <iostream>
#include <string>
#include "date.h"
#include <fstream>
using namespace std;
class Person
{
    string name;
    string family;
    string patronymic;
    string address;
    string phone;
    string email;
    string ICQ;
    date birthday;
public:
    Person();
    Person(string aname,    string afamily,string apatronymic,  string aaddress,    string aphone,  string aemail,  string aICQ ,int d,int m,int y);
    Person(const Person&a);
    Person operator=(const Person&a);
    
    friend ofstream& operator<<(ofstream&os,const Person&a);
    friend ifstream& operator>>(ifstream&is,Person&a);
    friend ostream& operator<<(ostream& os,const Person& a);
    friend istream& operator>>(istream& is, Person& a);
};
client.h
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
#include <iostream>
#include <fstream>
#include "avto.h"
#include "date.h"
#include "Person.h"
using namespace std;
#pragma once
class client
{
    Person personal_data;
    avto specifications;
    date order;
public:
    client(){};
    client(const Person&p,const avto&a,int o_d,int o_m,int o_y)
    {
        personal_data=p;
        specifications=a;
        order.set_day(o_d);
        order.set_mounth(o_m);
        order.set_year(o_y);
    }
    friend ostream operator<<(ostream& os,const client&a);      //при попытки написания глючит
    void show()
    {
        cout<<personal_data;
        cout<<specifications;
        cout<<"Order date="<<order;
    }
};
avto.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
#include <iostream>
#include "avto.h"
avto::avto()
{
 
}
avto::avto(string abody_type,string amark,string amodel,string atransmission,string atype_of_fuel,double adisplacement,int ayear_of_manufacture)
{
    body_type=abody_type;
    mark=amark;
    model=amodel;
    transmission=atransmission;
    type_of_fuel=atype_of_fuel;
    displacement=adisplacement;
    year_of_manufacture=ayear_of_manufacture;
}
avto::avto(const avto&a)
{
    body_type=a.body_type;
    mark=a.mark;
    model=a.model;
    transmission=a.transmission;
    type_of_fuel=a.type_of_fuel;
    displacement=a.displacement;
    year_of_manufacture=a.year_of_manufacture;
}
avto avto::operator=(const avto&a)
{
    body_type=a.body_type;
    mark=a.mark;
    model=a.model;
    transmission=a.transmission;
    type_of_fuel=a.type_of_fuel;
    displacement=a.displacement;
    year_of_manufacture=a.year_of_manufacture;
    return *this;
}
date.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
#include <iostream>
#include "date.h"
using namespace std;
    date::date()
    {
 
    }
    date::date(int d,int m,int y)
    {
        day=d;
        mounth=m;
        year=y;
    }
    date::date(const date&a)
    {
        day=a.get_day();
        mounth=a.get_mounth();
        year=a.get_year();
    }
    
    void date::set_day(int d)
    {
        day=d;
    }
    void date::set_mounth(int m)
    {
        mounth=m;
    }
    void date::set_year(int y)
    {
        year=y;
    }
 
    int date::get_day()const
    {
        return day;
    }
    int date::get_mounth()const
    {
        return mounth;
    }
    int date::get_year()const
    {
        return year;
    }
    date date::operator=(const date&a)
    {
        day=a.day;
        mounth=a.mounth;
        year=a.year;
        return *this;
    }
Person.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
#include <iostream>
#include "date.h"
#include "Person.h"
using namespace std;
Person::Person(){};
Person::Person(string aname,    string afamily,string apatronymic,  string aaddress,    string aphone,  string aemail,  string aICQ ,int d,int m,int y)
{
    name=aname;
    family=afamily;
    patronymic=apatronymic;
    address=aaddress;
    phone=aphone;
    email=aemail;
    ICQ=aICQ;
    birthday.set_day(d);
    birthday.set_mounth(m);
    birthday.set_year(y);
}
Person::Person(const Person&a)
{
    name=a.name;
    family=a.family;
    patronymic=a.patronymic;
    address=a.address;
    phone=a.phone;
    email=a.email;
    ICQ=a.ICQ;
    birthday=a.birthday;
}
Person Person::operator=(const Person&a)
{
    name=a.name;
    family=a.family;
    patronymic=a.patronymic;
    address=a.address;
    phone=a.phone;
    email=a.email;
    ICQ=a.ICQ;
    birthday=a.birthday;
    return *this;
}
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
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
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include "avto.h"
#include "date.h"
#include "Person.h"
#include "client.h"
#include <vector>
using namespace std;
ostream& operator<<(ostream& os,const date& a)
{
    os<<a.day<<",";
    os<<a.mounth<<",";
    os<<a.year<<endl;
    return os;
}
istream& operator>>(istream&is,date&a)
{
 
    cout<<"enter day=";
    is>>a.day;
 
    cout<<"enter mounth=";
    is>>a.mounth;
 
    cout<<"enter year=";
    is>>a.year;
    return is;
}
ifstream& operator>>(ifstream &is,date &a)
{
    int sz=sizeof(int);
    is.read((char*)&a.day,sz);
    is.read((char*)&a.mounth,sz);
    is.read((char*)&a.year,sz);
    return is;
}
ofstream& operator<<(ofstream &os,const date &a)
{
    int sz=sizeof(int);
    os.write((char*)&a.day,sz);
    os.write((char*)&a.mounth,sz);
    os.write((char*)&a.year,sz);
    return os;
}
 
ostream& operator<<(ostream& os,const Person& a)
{
    os<<"name="<<a.name<<endl;
    os<<"family="<<a.family<<endl;
    os<<"patronymic="<<a.patronymic<<endl;
    os<<"address="<<a.address<<endl;
    os<<"phone="<<a.phone<<endl;
    os<<"email="<<a.email<<endl;
    os<<"ICQ="<<a.ICQ<<endl;
    os<<"birthday=";
    os<<a.birthday<<endl;
    return os;
}
istream& operator>>(istream& is, Person& a)
{
    cout<<"enter name=";
 
    getline(is,a.name);
    //is>>a.name;
    cout<<"enter family=";
    getline(is,a.family);
    //is>>a.family;
    cout<<"enter patronymic=";
    getline(is,a.patronymic);
    //is>>a.patronymic;
    cout<<"enter address=";
    getline(is,a.address);
    //is>>a.address;
    cout<<"enter phone=";
    getline(is,a.phone);
    //is>>a.phone;
    cout<<"enter email=";
    getline(is,a.email);
    //is>>a.email;
    cout<<"enter ICQ=";
    getline(is,a.ICQ);
    //is>>a.ICQ;
 
    cout<<"enter birthday";
    is>>a.birthday;
    cin.ignore();
    return is;
}
ofstream& operator<<(ofstream& os,const Person& a)
{
 
    //os.write((char*)&a.birthday, sizeof(date));
 
    int len = a.name.length() + 1;
    os.write((char*)&len, sizeof(int));
    os.write(a.name.c_str(), len);
 
    len = a.family.length() + 1;
    os.write((char*)&len, sizeof(int));
    os.write(a.family.c_str(), len);   
 
    len = a.patronymic.length() + 1;
    os.write((char*)&len, sizeof(int));
    os.write(a.patronymic.c_str(), len); 
 
    len = a.address.length() + 1;
    os.write((char*)&len, sizeof(int));
    os.write(a.address.c_str(), len);
 
    len = a.phone.length() + 1;
    os.write((char*)&len, sizeof(int));
    os.write(a.phone.c_str(), len); 
 
    len = a.email.length() + 1;
    os.write((char*)&len, sizeof(int));
    os.write(a.email.c_str(), len);
 
    len = a.ICQ.length() + 1;
    os.write((char*)&len, sizeof(int));
    os.write(a.ICQ.c_str(), len);
 
    os<<a.birthday;
 
    return os;
}
ifstream& operator>>(ifstream& is, Person& a)
{
 
    //is.read((char*)&a.birthday, sizeof(date));
    int len;
 
    is.read((char*)&len, sizeof(int));
    if (is.eof()) return is;
    char *buf = new char[len];
    is.read(buf, len);
    a.name = buf;
    delete[] buf;
 
    is.read((char*)&len, sizeof(int));
    buf = new char[len];
    is.read(buf, len); 
    a.family = buf;
    delete[] buf;
 
    is.read((char*)&len, sizeof(int));
    buf = new char[len];
    is.read(buf, len); 
    a.patronymic = buf;
    delete[] buf;
 
    is.read((char*)&len, sizeof(int));
    buf = new char[len];
    is.read(buf, len); 
    a.address = buf;
    delete[] buf;
 
    is.read((char*)&len, sizeof(int));
    buf = new char[len];
    is.read(buf, len); 
    a.phone = buf;
    delete[] buf;
 
    is.read((char*)&len, sizeof(int));
    buf = new char[len];
    is.read(buf, len); 
    a.email = buf;
    delete[] buf;
 
    is.read((char*)&len, sizeof(int));
    buf = new char[len];
    is.read(buf, len); 
    a.ICQ = buf;
    delete[] buf;
 
    is>>a.birthday;
    return is;
}
 
ostream& operator<<(ostream& os,const avto& a)
{
    os<<"body type="<<a.body_type<<endl;
    os<<"mark="<<a.mark<<endl;
    os<<"model="<<a.model<<endl;
    os<<"transmission="<<a.transmission<<endl;
    os<<"type_of_fuel="<<a.type_of_fuel<<endl;
    os<<"displacement="<<a.displacement<<endl;
    os<<"year_of_manufacture="<<a.year_of_manufacture<<endl;
    
    return os;
}
istream& operator>>(istream& is, avto& a)
{
    cout<<"enter body_type=";
    getline(is,a.body_type);
 
    cout<<"enter mark=";
    getline(is,a.mark);
 
    cout<<"enter model=";
    getline(is,a.model);
 
    cout<<"enter transmission=";
    getline(is,a.transmission);
 
    cout<<"enter type_of_fuel=";
    getline(is,a.type_of_fuel);
 
    cout<<"enter displacement=";
    cin>>a.displacement;
 
    cout<<"enter year_of_manufacture=";
    cin>>a.year_of_manufacture;
 
    cin.ignore();
    return is;
}
ofstream& operator<<(ofstream&os,const avto&a)
{
    int len = a.body_type.length() + 1;
    os.write((char*)&len, sizeof(int));
    os.write(a.body_type.c_str(), len);
 
    len = a.mark.length() + 1;
    os.write((char*)&len, sizeof(int));
    os.write(a.mark.c_str(), len);  
 
    len = a.model.length() + 1;
    os.write((char*)&len, sizeof(int));
    os.write(a.model.c_str(), len);  
 
    len = a.transmission.length() + 1;
    os.write((char*)&len, sizeof(int));
    os.write(a.transmission.c_str(), len);  
 
    len = a.type_of_fuel.length() + 1;
    os.write((char*)&len, sizeof(int));
    os.write(a.type_of_fuel.c_str(), len);  
 
    len = sizeof(int);
    double d=sizeof(double);
    //os.write((char*)&a.displacement, d);
    os.write((char*)&a.year_of_manufacture, len);  
 
    return os;
}
ifstream& operator>>(ifstream&is,avto&a)
{
    int len;
 
    is.read((char*)&len, sizeof(int));
    if (is.eof()) return is;
    char *buf = new char[len];
    is.read(buf, len);
    a.body_type = buf;
    delete[] buf;
 
    is.read((char*)&len, sizeof(int));
    buf = new char[len];
    is.read(buf, len); 
    a.mark = buf;
    delete[] buf;
 
    is.read((char*)&len, sizeof(int));
    buf = new char[len];
    is.read(buf, len); 
    a.model = buf;
    delete[] buf;
 
    is.read((char*)&len, sizeof(int));
    buf = new char[len];
    is.read(buf, len); 
    a.transmission = buf;
    delete[] buf;
 
    is.read((char*)&len, sizeof(int));
    buf = new char[len];
    is.read(buf, len); 
    a.type_of_fuel = buf;
    delete[] buf;
 
    is.read((char*)&a.displacement, sizeof(double));
    is.read((char*)&a.year_of_manufacture, sizeof(int));
 
    return is;
}
ostream operator<<(ostream& os,const client&d)
{
    os<<d.personal_data;
    os<<d.specifications;
    os<<"order date=";
    os<<d.order;
    return os;
}
 
void main()
{
    
    avto audi("kabriolet","audi","derro","avtomat","benzin",3.2,2014);
    avto ford("korob","ford","sergo","avtomat","dizel'",2.8,2012);
     
    Person alex("Alex","lolkin","Anatolievich","siv 11","584845","5589@mail.ru","886699",6,10,2012);
    Person dima("dima","falonov","vitalievich","konina 22","0632548789","dim1975@mail.ru","548",12,11,1975);
    
    client z1(alex,audi,8,8,2013);
    client z2(dima,ford,8,8,2013);
cout<<z1;
cout<<z2;
 
}
Ошибка
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
1>------ Build started: Project: string, Configuration: Debug Win32 ------
1>Build started 08.08.2013 21:27:06.
1>ClCompile:
1>  main.cpp
1>c:\program files\microsoft visual studio 10.0\vc\include\ostream(604): error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          c:\program files\microsoft visual studio 10.0\vc\include\ios(176) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios'
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>          This diagnostic occurred in the compiler generated function 'std::basic_ostream<_Elem,_Traits>::basic_ostream(const std::basic_ostream<_Elem,_Traits> &)'
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>
1>          ]
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.62
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Если убрать из мейна cout<<для класса клиент и убрать саму реализацию ostream для класса клиент все работает как часы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru