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

Ошибка в унаследованном конструкторе - C++

Восстановить пароль Регистрация
 
Aндерсон_256
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 16
19.01.2014, 14:59     Ошибка в унаследованном конструкторе #1
Битый час сижу и не могу понять, в чем дело. Компилятор на 19 строке выдает ошибку undefined reference to `vtable for baseDMA'
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
#ifndef H_H_INCLUDED
#define H_H_INCLUDED
#include <iostream> // Базовый класс, использующий динамическое выделение памяти
class ABC
{
private:
char*label;
int rating;
public:
ABC(const char*l="null",int r =0);
ABC(const ABC&s);
virtual~ABC();
ABC&operator=(const ABC&r);
virtual void View()=0;
};
class baseDMA:public ABC
{
public:
baseDMA(const char*k = "null",int t = 0):ABC(k,t){} // ЗДЕСЬ ВЫХОДИТ ОШИБКА
baseDMA(const ABC & rs):ABC(rs){}
virtual ~baseDMA();
baseDMA & operator=(const baseDMA & rs);
virtual void View();
};
 
class lacksDMA:public ABC
{
private:
enum {COL_LEN = 40};
char color[COL_LEN];
public:
lacksDMA(const char*c = "blank", const char*l = "null",int r = 0);
lacksDMA (const char*c, const ABC& rs);
virtual void View();
};
 
class hasDMA:public ABC
{
private:
char*style;
public:
hasDMA (const char*s = "none", const char*l = "null", int r = 0);
hasDMA (const char * s, const ABC& rs) ;
hasDMA(const hasDMA & hs) ;
~hasDMA();
hasDMA&operator=(const hasDMA & rs);
virtual void View();
};
#endif // H_H_INCLUDED
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
#include "h.h"
#include <cstring>
#include <iostream>
ABC::ABC(const char*l, int r)
{
label = new char [std::strlen(l) + 1];
std::strcpy(label,l);
rating = r;
}
ABC::ABC(const ABC&rs)
{
label = new char[std::strlen(rs.label)+1] ;
std::strcpy(label, rs.label);
rating = rs.rating;
}
ABC::~ABC()
{
delete[]label;
}
ABC&ABC::operator=(const ABC&rs)
{
if (this == &rs)
return*this;
delete[]label;
label = new char[std::strlen(rs.label)+ 1];
std::strcpy(label, rs.label);
rating = rs.rating;
return *this;
}
void ABC::View()
{
std::cout << "Label: " << label << std::endl; // название
std::cout << "Rating: " << rating << std::endl; // рейтинг
}
 
baseDMA& baseDMA::operator=(const baseDMA&r)
{
    ABC::operator=(r);
    return *this;
}
void baseDMA::View()
{
    ABC::View();
}
// Методы lacksDMA
lacksDMA::lacksDMA(const char*c,const char*l,int r):ABC(l, r)
{
std::strncpy(color,c,39);
color[39] = '\0';
}
lacksDMA::lacksDMA(const char * c, const ABC&rs):ABC(rs)
{
std::strncpy(color, c, COL_LEN-1) ;
color[COL_LEN - 1] = '\0';
}
void lacksDMA::View()
{
ABC::View();
std::cout<<"color: " << color<<std::endl;
}
// Методы hasDMA
hasDMA::hasDMA(const char * s, const char * l,int r):ABC(l,r)
{
style = new char[std::strlen(s)+1];
std::strcpy(style,s);
}
hasDMA::hasDMA(const char*s,const ABC&rs):ABC(rs)
{
style = new char[std::strlen(s)+1];
std::strcpy(style,s);
}
hasDMA::hasDMA(const hasDMA&hs): ABC(hs) // вызывает конструктор копирования базового класса
{
style = new char [std::strlen(hs.style) + 1];
std::strcpy(style, hs.style);
}
hasDMA::~hasDMA()
{
delete[]style;
}
hasDMA&hasDMA::operator=(const hasDMA&hs)
{
if (this == &hs)
return *this;
ABC::operator=(hs); // копирование базовой части
delete[]style; // подготовка к операции new для style
style = new char [std::strlen(hs.style)+1];
std::strcpy(style,hs.style);
return*this;
}
void hasDMA::View()
{
ABC::View();
std::cout << " Style: " << style <<std::endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2014, 14:59     Ошибка в унаследованном конструкторе
Посмотрите здесь:

Ошибка в копирующем конструкторе C++
C++ ощибка в конструкторе
C++ Двоеточие в конструкторе
C++ Ошибка в конструкторе копирования класса
Ошибка в конструкторе копирования C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
19.01.2014, 15:28     Ошибка в унаследованном конструкторе #2
У Вас реализации деструктора baseDMA кстати нет.
anmartex
...
 Аватар для anmartex
1699 / 1192 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
19.01.2014, 15:32     Ошибка в унаследованном конструкторе #3
Aндерсон_256, в классе baseDMA описан но не реализован деструктор
Aндерсон_256
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 16
19.01.2014, 16:48  [ТС]     Ошибка в унаследованном конструкторе #4
Спасибо, все запустилось.
Yandex
Объявления
19.01.2014, 16:48     Ошибка в унаследованном конструкторе
Ответ Создать тему
Опции темы

Текущее время: 20:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru