![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Morel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 14.10.2003 Репутация: 1 Всего: 1 |
Понять одну вещь никак не могу.
При раннем связывании все нормально вызывается TranslateMessage() из класса Pshaiba. А вот при позднем из Device. Почему так происходит? |
|||
|
||||
| Конструктор |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 641 Регистрация: 12.5.2004 Где: Москва Репутация: нет Всего: 10 |
Хм интересно как TranslateMessage вызывается из Device, если она там чисто-виртуальная функция?
|
|||
|
||||
| Morel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 14.10.2003 Репутация: 1 Всего: 1 |
Ну вот так и вызывается:
Pure virtual function called Я и спрашиваю почему она оттуда вызывается, а не из Pshaiba. |
|||
|
||||
| gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
А как ты определил, что вызывается из Device? Она там у тебя объявлена нулевой, а значит реализации иметь не может. Мне кажется ты чего-то путаешь.
-------------------- С уважением. Gray. |
|||
|
||||
| Конструктор |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 641 Регистрация: 12.5.2004 Где: Москва Репутация: нет Всего: 10 |
Вот я написал у себя:
У меня оба раза выводится TranslateMessage. (BC 3.1) Попробуй Options->Compiler->C++ Options->C++ Virtual tables->[X] Smart |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Может она из конструктора вызывается?
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: нет Всего: 24 |
Дык код правильно работает
Выведет Translate message -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| Morel |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 14.10.2003 Репутация: 1 Всего: 1 |
Это я напутал с конструктором Pshaiba. В нем вызывал
Получилось, что вызывались два конструктора Device, по умаолчанию и мой с параметрами. Сделал инициализацию отдельной функцией в Device
Все заработало. Вопрос теперь чисто теоретический. Почему p.TranslateMessage() работал правильно? |
||||
|
|||||
| 3,14 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1614 Регистрация: 18.6.2004 Где: Н. Новгород Репутация: нет Всего: 24 |
Он и должен работать правильно, пер-ая p имеет тип Pshaiba и, следовательно, вызывает TranslateMessage описанный в Pshaiba
Это сообщение отредактировал(а) 3,14 - 24.8.2004, 09:59 -------------------- Может быть, это только мой бред, Может быть, жизнь не так хороша, Может быть, я не выйду на свет, Но я летал, когда пела душа... |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
ВСе таки надо поставить точки над i
Сообщение Pure virtual function called Можно получить только в одном случае : вызвать виртуальную функцию в теле конструктора производного класса. Это имело место или нет ? -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| lynx_916 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 13.6.2004 Где: Молдова Репутация: нет Всего: 1 |
поправочка, чисто виртуальную, а это большая разницца. -------------------- Who dares, wins. (с) Solid Snake |
|||
|
||||
| Morel |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 14.10.2003 Репутация: 1 Всего: 1 |
2: 3,14
А p1 другой что ли? Вот как это происходит.
Если в конструкторе Pshaiba вызвать init(), то все нормально. |
||||
|
|||||
| Borisff2003 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 26.2.2004 Где: г. Уфа Репутация: 1 Всего: 1 |
Сделал твой код он прекрасно делается без всякого init
И такой вот делается
--------------------
Лень, двигатель прогресса |
|||
|
||||
| Morel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 14.10.2003 Репутация: 1 Всего: 1 |
Странно у меня стабильно вылетает в BC 3.1, именно на строке
p1->TranslateMessage();. Твой код понятно что будет работать. Я же говорил, что моя проблемма в конструкторах. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Прваивильно будет так
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |