![]() |
|
Модераторы: bsa |
![]()
|
|
| Riddik |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Что-то я запутался.
Есть абстрактный базовый класс:
Из него наследуется другой:
Если не объявлять экземпляр класса Ground, то всё в порядке. А если объявить
Не хочет компилироваться: error C2259: 'Ground' : cannot instantiate abstract class due to following members: c:\prog\classes.h(194) : see declaration of 'Ground' c:\prog\main.cpp(13) : warning C4259: 'void __thiscall BaseK::Picter(void)' : pure virtual function was not defined c:\prog\classes.h(184) : see declaration of 'Picter' c:\prog\main.cpp(13) : error C2259: 'Ground' : cannot instantiate abstract class due to following members: c:\prog\classes.h(194) : see declaration of 'Ground' c:\prog\main.cpp(13) : warning C4259: 'void __thiscall BaseK::Picter(void)' : pure virtual function was not defined c:\prog\classes.h(184) : see declaration of 'Picter' Если объявить как указатель Ground *pground; - компилируется, но слишком много переделывать - критические ошибки в райнтайме. Что не так делаю? Добавлено через 3 минуты и 36 секунд Сначала код писался без абстрактного класса и все идеально работало. Теперь появилась необходимость использовать указатель на базовый класс, поэтому перед уже рабочим и протестированным классом я вставил абстрактный класс, а "рабочий" класс сделал наследуемым от него. |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Riddik
странно как-то..
это не работает??? проверь имя функции Picter в базовом классе и в наследнике..может по другому написано? |
|||
|
||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Хм... ошибка возникает, если использую перегруженные ф-ии. В рабочем коде (макет которого я здесть привёл) в абстрактном классе:
Нельзя так делать? |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
||||
|
||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Я не могу привести весь код из-за его размеров.
Вот в чём, возможно проблема: в абстрактном классе объявлено несколько виртуальных функций, в одном наследнике только часть этих функций реализуется, другая часть даже не упоминается, а в другом наследнике - другая, урощенный пример:
Может, в этом проблема? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Оба класса тут абстрактны.
Так как в одном не определена функция Move, в другом - Stop. Надо определить оба |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
может тебе нужно было сделать так?
|
|||
|
||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Да, блин
Спасибо, что помогли увидеть вроде бы очевидную проблему! Lazin, в моём случае - нет, иначе B унаследует много ненужного для себя из А. Будет "цепочка" похожих классов, выведенных из абстрактного, поэтому лучше сделать два абстрактных класса в моём случае. Спасибо! |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |