![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| boostcoder |
|
||||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
халоф пиплы!
сегодня был озадачен следующим. имеем базовый абстрактный класс описанный в хидере base.hpp:
далее, наследуем его в класс derived, описанный в derived.hpp:
и далее, пытаемся реализовать base::m() в наследнике в его .cpp файле:
то получаю:
я чего-то недопонимаю? или что? спасибо. зы если его реализовать прям внутри декларации derived - то все ок. |
||||||||
|
|||||||||
| Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 1 Всего: 50 |
Ты забыл объявить метод m в derived.
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
А оно к этому случаю относится? О.о
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
ващето не "должен", а "обязан" -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
а двойная декларация одного и того же, разве не относится к ODR? oO
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
boostcoder, может в отпуск пора ?
Добавлено через 2 минуты и 2 секунды декларация (обьявление) может быть сколь угодно много раз.. это вот с определениями проблема.. Добавлено через 3 минуты и 36 секунд ODR - one definition rule, not one declaration rule.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
mes, пора. надеюсь со следующей недели выйду.
но все равно не понимаю, зачем мне дважды декларировать одни и те же методы допустим, в предке я изменю декларацию метода. так мне что, нужно во всех наследниках проделать то же самое? где логика? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
это я-то понимаю. но вод по логике, что-то тут не вяжется... Добавлено через 1 минуту и 8 секунд аааа, ну да. так можно на любой вопрос по С++ ответить =) в общем понял, что так оно и задумывалось. всем спасибо. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ага - лишний труд ) Добавлено через 3 минуты и 13 секунд но на этот по другому никак не ответить |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
пора на D переходить. скоро в GCC добавят поддержку. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Угу. Только осталось дождаться библиотек под него... |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Они не одни и те же. Декларация derived::m говорит компилятору, что вы собираетесь перебить виртуальный метод m в наследнике. Без этой декларации и без самого модуля с реализацией компилятор не сможет правильно сформировать таблицу виртуальных методов класса derived в других модулях, где он используется |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
он чисто виртуальный. перебить его не получится до тех пор, пока он не реализован. на основании этого, компилятор точно знает что в наследнике происходит не переопределение, а реализация. мне так думается... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |