Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 30.10.2017
Сообщений: 34
1

Base class undefined, type redefinition

04.03.2018, 15:30. Показов 1717. Ответов 8
Метки нет (Все метки)

Проблема:
Для начала поясню структуру:
Класс CShockingLiter наследует классы CFlashlight и CElectroShocker, которые в свою очередь являются производными класса CDevice (Ромбовидное наследование, а именно: Предмет -> Фонарик и Электрошокер -> Фонарик с Электрошокером).

При компилировании проекта, выбивает ошибки:

Severity Code Description Project File Line Suppression State

Error C2504 'CDevice': base class undefined Lab7OOP c:\users\volod\source\repos\lab7oop\lab7oop\celectroshocker. h 4

Error C2504 'CDevice': base class undefined Lab7OOP c:\users\volod\source\repos\lab7oop\lab7oop\celectroshocker. h 4

Error C2011 'CDevice': 'class' type redefinition Lab7OOP c:\users\volod\source\repos\lab7oop\lab7oop\cdevice.h 7

Error C2011 'CDevice': 'class' type redefinition Lab7OOP c:\users\volod\source\repos\lab7oop\lab7oop\cdevice.h 7

Самое интересное (учитывая что классы CFlashlight, CElectroShocker почти идентичные), что проблема только в классе CElectroShocker. (Возможно это не так)

Prolog
1
2
3
4
5
6
7
8
9
10
ЭТО СКОРЕЕ ВСЕГО НЕ ВАЖНО! Но естественно есть ещё 4 ошибки как следствия предыдущих, которые даёт нам override: не наследуются чисто виртуальные функции. Опять же только для класса CElectroShocker и по 2 на каждую функцию (2 переопределяемые виртуальные функции):
 
Severity    Code    Description Project File    Line    Suppression State
Error   C3668   'CElectroShocker::TellType': method with override specifier 'override' did not override any base class methods  Lab7OOP c:\users\volod\source\repos\lab7oop\lab7oop\celectroshocker.h   19  
 
Error   C3668   'CElectroShocker::TellType': method with override specifier 'override' did not override any base class methods  Lab7OOP c:\users\volod\source\repos\lab7oop\lab7oop\celectroshocker.h   19  
 
Error   C3668   'CElectroShocker::SetIdentifyID': method with override specifier 'override' did not override any base class methods Lab7OOP c:\users\volod\source\repos\lab7oop\lab7oop\celectroshocker.h   20  
 
Error   C3668   'CElectroShocker::SetIdentifyID': method with override specifier 'override' did not override any base class methods Lab7OOP c:\users\volod\source\repos\lab7oop\lab7oop\celectroshocker.h   20
Код проекта:

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
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
//CDevice.h -------------------------------
 
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class CDevice
{
protected:
    char * Name;
    int Energy;
    char * ID;
    string Type;
 
public:
    CDevice();
    CDevice(string Type);
    CDevice(const CDevice& other);
    virtual ~CDevice();
 
    CDevice& operator = (const CDevice& obj);
 
    void SetName(char * Name);
    void GetName();
 
    virtual void TellType() = 0;
    virtual void SetIdentifyID() = 0; 
    // IdentifyID -> for examp.: 
    // if ElectroShocker -> ES100;
};
 
//CFlashlight.h -------------------------------
 
#include "CDevice.h"
 
class CFlashlight : public CDevice
{
protected:
    size_t * Brightness; //(0..100), Динамічна змінна
 
public:
    CFlashlight();
    CFlashlight(string Type);
    CFlashlight(const CFlashlight& obj);
    ~CFlashlight();
 
    CFlashlight& operator = (const CFlashlight& obj);
 
    void SetBrightness(size_t quantity);
    void GetBrightness();
    
    void TellType() override;
    void SetIdentifyID() override;
};
 
//CElectroShocker.h -------------------------------
 
#include "CDevice.h"
 
class CElectroShocker : public CDevice
{
protected:
    size_t * Strength; //(0..10)
 
public:
    CElectroShocker();
    CElectroShocker(string Type);
    CElectroShocker(const CElectroShocker& obj);
    ~CElectroShocker();
 
    CElectroShocker& operator = (const CElectroShocker& obj);
 
    void SetStrength(size_t quantity);
    void GetStrength();
 
    void TellType() override;
    void SetIdentifyID() override;
};
 
//CShockingLiter.h -------------------------------
 
#include "CFlashlight.h"
#include "CElectroShocker.h"
 
class CShockingLiter : public CFlashlight, public CElectroShocker
{
protected:
    size_t * Price;
    string Type;
    char * ID;
 
public:
    CShockingLiter(string FLType, string ESType);
    ~CShockingLiter();
 
    CShockingLiter& operator = (CShockingLiter& obj);
 
    void SetPrice(size_t Price);
    void ShowPrice();
 
    void TellType();
    void SetIdentifyID();
};
 
//CDevice.cpp -------------------------------
 
#include "stdafx.h"
#include "CDevice.h"
 
 
CDevice::CDevice() : Name(new char[20])
{
    cout << "CDevice Constructor" << endl;
    strcpy(Name, "No name");
}
 
CDevice::CDevice(string Type)
{
    this->Type = Type;
    cout << "CDevice Constructor" << endl;
}
 
CDevice::CDevice(const CDevice& other)
{
    this->Name = new char[strlen(other.Name)];
    strcpy(this->Name, other.Name);
 
    this->Energy = other.Energy;
}
 
CDevice::~CDevice()
{
    cout << "CDevice Destructor" << endl;
 
    if (Name != nullptr)
    {
        delete[] Name;
        Name = nullptr;
    }
}
 
CDevice& CDevice::operator = (const CDevice& obj)
{
    if (this != &obj)
    {
        cout << "CRacer operator = " << endl;
        delete[] this->Name;
        this->Name = new char[strlen(obj.Name)];
        strcpy(this->Name, obj.Name);
    }
    return *this;
}
 
void CDevice::SetName(char * Name)
{
    const size_t len = strlen(Name);
 
    this->Name = new char[len];
    strcpy(this->Name, Name);
}
 
void CDevice::GetName()
{
    cout << "Device name is: ";
    for (size_t i = 0; i < strlen(Name); i++)
    {
        cout << Name[i];
    }
    cout << endl;
}
 
//CFlashlight.cpp -------------------------------
 
#include "stdafx.h"
#include "CFlashlight.h"
 
 
CFlashlight::CFlashlight() : Brightness(new size_t)
{
    cout << "CFlashlight Constructor" << endl;
    *Brightness = 0;
}
 
CFlashlight::CFlashlight(string Type) : CDevice(Type)
{
    cout << "CFlashlight Constructor" << endl;
}
 
CFlashlight::CFlashlight(const CFlashlight& obj)
{
    this->Brightness = new size_t;
    *this->Brightness = *obj.Brightness;
}
 
CFlashlight::~CFlashlight()
{
    cout << "CFlashlight Destructor" << endl;
 
    if (Brightness != nullptr)
    {
        delete Brightness;
        Brightness = nullptr;
    }
}
 
CFlashlight& CFlashlight::operator = (const CFlashlight& obj)
{
    if (this != &obj)
    {
        delete this->Brightness;
        this->Brightness = new size_t;
        *this->Brightness = *obj.Brightness;
        CDevice::operator = (obj);
    }
    return *this;
}
 
void CFlashlight::SetBrightness(size_t quantity)
{
    Brightness = new size_t;
 
    if (quantity > 100 || quantity < 0)
    {
        throw exception("Brightness value doesn't fall into the range! ");
    }
 
    try
    {
        *Brightness = quantity;
    }
    catch (exception &ex)
    {
        cout << ex.what() << endl;
    }
}
 
void CFlashlight::GetBrightness()
{
    cout << "Brightness of the liter is: " << *Brightness << endl;
}
 
void CFlashlight::TellType()
{
    cout << "The type of this device is: ";
    for (size_t i = 0; i < Type.length(); i++)
    {
        cout << Type[i];
    }
    cout << endl;
}
 
void CFlashlight::SetIdentifyID()
{
    char c[] = "FL100";
    ID = c;
}
 
//CElectroShocker.cpp -------------------------------
 
#include "stdafx.h"
#include "CElectroShocker.h"
 
 
CElectroShocker::CElectroShocker() : Strength(new size_t)
{
    cout << "CElectroShocker Constructor" << endl;
    *Strength = 0;
}
 
CElectroShocker::CElectroShocker(string Type) : CDevice(Type)
{
    cout << "CElectroShocker Constructor" << endl;
}
 
CElectroShocker::CElectroShocker(const CElectroShocker& obj)
{
    this->Strength = new size_t;
    *this->Strength = *obj.Strength;
}
 
CElectroShocker::~CElectroShocker()
{
    cout << "CElectroShocker Destructor" << endl;
 
    if (Strength != nullptr)
    {
        delete Strength;
        Strength = nullptr;
    }
}
 
CElectroShocker& CElectroShocker::operator = (const CElectroShocker& obj)
{
    if (this != &obj)
    {
        delete this->Strength;
        this->Strength = new size_t;
        *this->Strength = *obj.Strength;
        CDevice::operator = (obj);
    }
    return *this;
}
 
void CElectroShocker::SetStrength(size_t quantity)
{
    Strength = new size_t;
 
    if (quantity > 10 || quantity < 0)
    {
        throw exception("Strength value doesn't fall into the range! ");
    }
 
    try
    {
        *Strength = quantity;
    }
    catch (exception &ex)
    {
        cout << ex.what() << endl;
    }
}
 
void CElectroShocker::GetStrength()
{
    cout << "Strength of the ElectroShicker is: " << *Strength << endl;
}
 
void CElectroShocker::TellType()
{
    cout << "The type of this device is: ";
    for (size_t i = 0; i < Type.length(); i++)
    {
        cout << Type[i];
    }
    cout << endl;
}
 
void CElectroShocker::SetIdentifyID()
{
    char c[] = "ES100";
    ID = c;
}
 
//CShockingLiter.cpp -------------------------------
 
#include "stdafx.h"
#include "CShockingLiter.h"
 
 
CShockingLiter::CShockingLiter(string FLType, string ESType) : CFlashlight(FLType), CElectroShocker(ESType)
{
    cout << "CShockingLiter Constructor" << endl;
    this->Type = FLType + ' ' + ESType;
}
 
CShockingLiter::~CShockingLiter()
{
    cout << "CShockingLiter Destructor" << endl;
 
    if (Price != nullptr)
    {
        delete Price;
        Price = nullptr;
    }
}
 
CShockingLiter& CShockingLiter::operator = (CShockingLiter& obj)
{
    if (this != &obj)
    {
        cout << "CShockingLiter operator = " << endl;
        CFlashlight::operator = (obj);
        CElectroShocker::operator = (obj);
    }
}
 
void CShockingLiter::SetPrice(size_t Price)
{
    this->Price = new size_t;
    *this->Price = Price;
}
 
void CShockingLiter::ShowPrice()
{
    cout << "Price is: " << *Price << endl;
}
 
void CShockingLiter::TellType()
{
    cout << "The type of this device is: ";
    for (size_t i = 0; i < Type.length(); i++)
    {
        cout << Type[i];
    }
}
 
void CShockingLiter::SetIdentifyID()
{
    char c[] = "SL100";
    ID = c;
}
 
//main.cpp -------------------------------
 
#include "stdafx.h"
#include <iostream>
#include "CShockingLiter.h"
 
int main()
{
    CShockingLiter F1("Flashlight", "ElectroShocker");
    
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2018, 15:30
Ответы с готовыми решениями:

error C2504: 'TwoDimentinalShape' : base class undefined
Всем здравствуте, мой конкретный класс не видит свой абстрактный класс, может я что-то напутала,...

redefinition of class
Даже не могу предположить что не так, наверняка ошибка глупая, подскажите подалуйста ...

Объяснить причины ошибки "Extra qualification 'CLASS CONSTRUCTOR' and 'CLASS' has incomplete type"
Согласно синтаксису, вроде все правильно, но ошибка... что не так? Ошибки компилятора ниже на...

Ошибка — base operand of '->' has nonpointer class qwerty
делаю прогу, чтоб разобраться как устроены классы, вылетает ошибка, подскажите почему пожалуйста...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
8
Модератор
Эксперт С++
10492 / 8731 / 5275
Регистрация: 18.12.2011
Сообщений: 23,341
04.03.2018, 15:50 2
Цитата Сообщение от _Sora_ Посмотреть сообщение
class CShockingLiter : public CFlashlight, public CElectroShocker
Думаю, проблема тут, т.к. оба базовых класса отнаследованы от CDevice
используйте виртуальное наследование
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
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
//CDevice.h -------------------------------
 
#include <iostream>
#include <string>
 
using namespace std;
 
class CDevice
{
protected:
    char * Name;
    int Energy;
    char * ID;
    string Type;
 
public:
    CDevice();
    CDevice(string Type);
    CDevice(const CDevice& other);
    virtual ~CDevice();
 
    CDevice& operator = (const CDevice& obj);
 
    void SetName(char * Name);
    void GetName();
 
    virtual void TellType() = 0;
    virtual void SetIdentifyID() = 0; 
    // IdentifyID -> for examp.: 
    // if ElectroShocker -> ES100;
};
 
 
 
class CFlashlight : public CDevice
{
protected:
    size_t * Brightness; //(0..100), Динамічна змінна
 
public:
    CFlashlight();
    CFlashlight(string Type);
    CFlashlight(const CFlashlight& obj);
    ~CFlashlight();
 
    CFlashlight& operator = (const CFlashlight& obj);
 
    void SetBrightness(size_t quantity);
    void GetBrightness();
    
    void TellType() override;
    void SetIdentifyID() override;
};
 
 
 
class CElectroShocker : public CDevice
{
protected:
    size_t * Strength; //(0..10)
 
public:
    CElectroShocker();
    CElectroShocker(string Type);
    CElectroShocker(const CElectroShocker& obj);
    ~CElectroShocker();
 
    CElectroShocker& operator = (const CElectroShocker& obj);
 
    void SetStrength(size_t quantity);
    void GetStrength();
 
    void TellType() override;
    void SetIdentifyID() override;
};
 
 
 
class CShockingLiter : virtual public CFlashlight,  virtual  public CElectroShocker
{
protected:
    size_t * Price;
    string Type;
    char * ID;
 
public:
    CShockingLiter(string FLType, string ESType);
    ~CShockingLiter();
 
    CShockingLiter& operator = (CShockingLiter& obj);
 
    void SetPrice(size_t Price);
    void ShowPrice();
 
    void TellType();
    void SetIdentifyID();
};
 
 
 
CDevice::CDevice() : Name(new char[20])
{
    cout << "CDevice Constructor" << endl;
    strcpy(Name, "No name");
}
 
CDevice::CDevice(string Type)
{
    this->Type = Type;
    cout << "CDevice Constructor" << endl;
}
 
CDevice::CDevice(const CDevice& other)
{
    this->Name = new char[strlen(other.Name)];
    strcpy(this->Name, other.Name);
 
    this->Energy = other.Energy;
}
 
CDevice::~CDevice()
{
    cout << "CDevice Destructor" << endl;
 
    if (Name != nullptr)
    {
        delete[] Name;
        Name = nullptr;
    }
}
 
CDevice& CDevice::operator = (const CDevice& obj)
{
    if (this != &obj)
    {
        cout << "CRacer operator = " << endl;
        delete[] this->Name;
        this->Name = new char[strlen(obj.Name)];
        strcpy(this->Name, obj.Name);
    }
    return *this;
}
 
void CDevice::SetName(char * Name)
{
    const size_t len = strlen(Name);
 
    this->Name = new char[len];
    strcpy(this->Name, Name);
}
 
void CDevice::GetName()
{
    cout << "Device name is: ";
    for (size_t i = 0; i < strlen(Name); i++)
    {
        cout << Name[i];
    }
    cout << endl;
}
 
 
 
 
CFlashlight::CFlashlight() : Brightness(new size_t)
{
    cout << "CFlashlight Constructor" << endl;
    *Brightness = 0;
}
 
CFlashlight::CFlashlight(string Type) : CDevice(Type)
{
    cout << "CFlashlight Constructor" << endl;
}
 
CFlashlight::CFlashlight(const CFlashlight& obj)
{
    this->Brightness = new size_t;
    *this->Brightness = *obj.Brightness;
}
 
CFlashlight::~CFlashlight()
{
    cout << "CFlashlight Destructor" << endl;
 
    if (Brightness != nullptr)
    {
        delete Brightness;
        Brightness = nullptr;
    }
}
 
CFlashlight& CFlashlight::operator = (const CFlashlight& obj)
{
    if (this != &obj)
    {
        delete this->Brightness;
        this->Brightness = new size_t;
        *this->Brightness = *obj.Brightness;
        CDevice::operator = (obj);
    }
    return *this;
}
 
void CFlashlight::SetBrightness(size_t quantity)
{
    Brightness = new size_t;
 
    if (quantity > 100 || quantity < 0)
    {
        throw exception("Brightness value doesn't fall into the range! ");
    }
 
    try
    {
        *Brightness = quantity;
    }
    catch (exception &ex)
    {
        cout << ex.what() << endl;
    }
}
 
void CFlashlight::GetBrightness()
{
    cout << "Brightness of the liter is: " << *Brightness << endl;
}
 
void CFlashlight::TellType()
{
    cout << "The type of this device is: ";
    for (size_t i = 0; i < Type.length(); i++)
    {
        cout << Type[i];
    }
    cout << endl;
}
 
void CFlashlight::SetIdentifyID()
{
    char c[] = "FL100";
    ID = c;
}
 
 
 
 
CElectroShocker::CElectroShocker() : Strength(new size_t)
{
    cout << "CElectroShocker Constructor" << endl;
    *Strength = 0;
}
 
CElectroShocker::CElectroShocker(string Type) : CDevice(Type)
{
    cout << "CElectroShocker Constructor" << endl;
}
 
CElectroShocker::CElectroShocker(const CElectroShocker& obj)
{
    this->Strength = new size_t;
    *this->Strength = *obj.Strength;
}
 
CElectroShocker::~CElectroShocker()
{
    cout << "CElectroShocker Destructor" << endl;
 
    if (Strength != nullptr)
    {
        delete Strength;
        Strength = nullptr;
    }
}
 
CElectroShocker& CElectroShocker::operator = (const CElectroShocker& obj)
{
    if (this != &obj)
    {
        delete this->Strength;
        this->Strength = new size_t;
        *this->Strength = *obj.Strength;
        CDevice::operator = (obj);
    }
    return *this;
}
 
void CElectroShocker::SetStrength(size_t quantity)
{
    Strength = new size_t;
 
    if (quantity > 10 || quantity < 0)
    {
        throw exception("Strength value doesn't fall into the range! ");
    }
 
    try
    {
        *Strength = quantity;
    }
    catch (exception &ex)
    {
        cout << ex.what() << endl;
    }
}
 
void CElectroShocker::GetStrength()
{
    cout << "Strength of the ElectroShicker is: " << *Strength << endl;
}
 
void CElectroShocker::TellType()
{
    cout << "The type of this device is: ";
    for (size_t i = 0; i < Type.length(); i++)
    {
        cout << Type[i];
    }
    cout << endl;
}
 
void CElectroShocker::SetIdentifyID()
{
    char c[] = "ES100";
    ID = c;
}
 
 
 
 
CShockingLiter::CShockingLiter(string FLType, string ESType) : CFlashlight(FLType), CElectroShocker(ESType)
{
    cout << "CShockingLiter Constructor" << endl;
    this->Type = FLType + ' ' + ESType;
}
 
CShockingLiter::~CShockingLiter()
{
    cout << "CShockingLiter Destructor" << endl;
 
    if (Price != nullptr)
    {
        delete Price;
        Price = nullptr;
    }
}
 
CShockingLiter& CShockingLiter::operator = (CShockingLiter& obj)
{
    if (this != &obj)
    {
        cout << "CShockingLiter operator = " << endl;
        CFlashlight::operator = (obj);
        CElectroShocker::operator = (obj);
    }
    return *this;
}
 
void CShockingLiter::SetPrice(size_t Price)
{
    this->Price = new size_t;
    *this->Price = Price;
}
 
void CShockingLiter::ShowPrice()
{
    cout << "Price is: " << *Price << endl;
}
 
void CShockingLiter::TellType()
{
    cout << "The type of this device is: ";
    for (size_t i = 0; i < Type.length(); i++)
    {
        cout << Type[i];
    }
}
 
void CShockingLiter::SetIdentifyID()
{
    char c[] = "SL100";
    ID = c;
}
 
 
 
int main()
{
    CShockingLiter F1("Flashlight", "ElectroShocker");
    
    return 0;
}
но Вы еще здесь напортачили с выделением памяти
1
1118 / 849 / 392
Регистрация: 30.10.2017
Сообщений: 2,378
04.03.2018, 15:55 3
Лучший ответ Сообщение было отмечено _Sora_ как решение

Решение

У меня на MSVC2017 все компилируется. В шапках не напутали? Не вижу их в вашем коде.

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
//CDevice.h -------------------------------
#pragma once
#include <iostream>
 
using namespace std;
 
// ...
 
//CFlashlight.h -------------------------------
 
#pragma once
#include "CDevice.h"
 
// ...
 
//CElectroShocker.h -------------------------------
 
#pragma once
#include "CDevice.h"
 
// ...
 
//CShockingLiter.h -------------------------------
 
#pragma once
#include "CFlashlight.h"
#include "CElectroShocker.h"
 
// ...
 
//CDevice.cpp -------------------------------
 
#include "CDevice.h"
 
// ...
 
//CFlashlight.cpp -------------------------------
 
#include "CFlashlight.h"
#include <iostream>
 
using namespace std;
 
// ...
 
//CElectroShocker.cpp -------------------------------
 
#include "CElectroShocker.h"
#include <iostream>
 
// ...
 
using namespace std;
 
//CShockingLiter.cpp -------------------------------
 
#include <iostream>
#include "CShockingLiter.h"
 
using namespace std;
 
// ...
1
1 / 1 / 1
Регистрация: 30.10.2017
Сообщений: 34
04.03.2018, 16:04  [ТС] 4
Цитата Сообщение от zss Посмотреть сообщение
Думаю, проблема тут, т.к. оба базовых класса отнаследованы от CDevice
используйте виртуальное наследование
Проблема не в этом(, мне нужно именно не виртуальное наследование, чтобы иметь в результируючем классе, вот такой
"спареный" конструктор:
C++
1
2
3
4
5
CShockingLiter::CShockingLiter(string FLType, string ESType) : CFlashlight(FLType), CElectroShocker(ESType)
{
    cout << "CShockingLiter Constructor" << endl;
    this->Type = FLType + ' ' + ESType;
}
Добавлено через 2 минуты
Цитата Сообщение от QuakerRUS Посмотреть сообщение
У меня на MSVC2017 все компилируется. В шапках не напутали? Не вижу их в вашем коде.
Ахахах, всё было так просто...
Не знание действий препроцесорной команды pragma меня и погубило)
C++
1
#pragma once // Гадёныш :3
Спасибо, Вам.)
0
Модератор
Эксперт С++
10492 / 8731 / 5275
Регистрация: 18.12.2011
Сообщений: 23,341
04.03.2018, 16:23 5
Цитата Сообщение от QuakerRUS Посмотреть сообщение
У меня на MSVC2017 все компилируется
Не могло оно компилироваться, например, по такой причине:
Цитата Сообщение от zss Посмотреть сообщение
CDevice& CDevice::operator = (const CDevice& obj)
В этом методе не было
C++
1
return *this;
0
1118 / 849 / 392
Регистрация: 30.10.2017
Сообщений: 2,378
04.03.2018, 16:27 6
zss, в коде ТС эта строчка есть.
0
Модератор
Эксперт С++
10492 / 8731 / 5275
Регистрация: 18.12.2011
Сообщений: 23,341
04.03.2018, 16:33 7
Цитата Сообщение от QuakerRUS Посмотреть сообщение
в коде ТС эта строчка есть.
А это что:
Цитата Сообщение от _Sora_ Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
CShockingLiter& CShockingLiter::operator = (CShockingLiter& obj) 
{ 
    if (this != &obj) 
   { 
           cout << "CShockingLiter operator = " << endl; 
           CFlashlight::operator = (obj); 
           CElectroShocker::operator = (obj); 
   } 
}
0
1 / 1 / 1
Регистрация: 30.10.2017
Сообщений: 34
04.03.2018, 16:36  [ТС] 8
[quote="zss;12182795"]А это что:
Сообщение от _Sora_
C++
1
2
3
4
5
6
7
8
9
CShockingLiter& CShockingLiter::operator = (CShockingLiter& obj) 
{ 
* * if (this != &obj) 
* *{ 
* * * * * *cout << "CShockingLiter operator = " << endl; 
* * * * * *CFlashlight::operator = (obj); 
* * * * * *CElectroShocker::operator = (obj); 
* *} 
}
Всё верно, пропустил, компилятор ещё не видел ошибки, вот после уже исправления этой, я все исправил.
Спасибо)
0
1118 / 849 / 392
Регистрация: 30.10.2017
Сообщений: 2,378
04.03.2018, 16:37 9
zss, в коде программы не происходит присваивания объектов, поэтому и компилятор не ругался. Когда добавил присваивание, начало ругаться.

C++
1
2
    CShockingLiter F1("Flashlight", "ElectroShocker"), F2("Flashlight", "ElectroShocker");
    F1 = F2;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2018, 16:37

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

E2251 Cannot find default constructor to initialize base class
Здравствуйте. Столкнулся с данной ошибкой: class fCountry { public: ...

Undefined type
Возникает ошибка, что не определен класс SurfaceCalculationThread. Как исправить? #include...

Ошибка Undefined type в VS 2010
Суть в том,что в упражнении книги Страуструпа нужно собрать,дополнить и протестировать приведенный...

Request for member '.' in '.', which is of non-class type
Здравствуйте форумчане. Возникает ошибка при компиляции в методе foo() void foo() { ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.