![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
((XD *)x.get())->ff(); при выполнении этого возникает некий exception, который даже в catch не попадает. Что происходит? Это сообщение отредактировал(а) User008 - 6.5.2012, 16:28 |
|||
|
||||
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
Если убрать virtual из XD::ff, то исключение не бросается. Не понимаю, что происходит.
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
а с чего ради
икс ( вернее x.get() )должен приводиться к XD *? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
||||
|
||||
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
Видимо в конструкторе недопустимо использовать виртуальные функции.
Это сообщение отредактировал(а) Randajad - 6.5.2012, 20:03 |
|||
|
||||
| Sahab |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 151 Регистрация: 1.9.2009 Репутация: нет Всего: 3 |
Откройте для себя dynamic_cast...
http://liveworkspace.org/code/4eae1505583c...e631626a517ba6e Добавлено через 4 минуты и 49 секунд Да... и segfault != exception Это сообщение отредактировал(а) Sahab - 7.5.2012, 00:35 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
обращение по неверному адресу не родит исключение. ну если только компилятор+его настройки это не делают, но это нестандартно. лучше откройте для себя фабрику |
|||
|
||||
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
||||
|
||||
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
Посмотрел примеры с фабричным методом. В тех, что я видел класс поля выбирается через параметр базового класса. А что если я не хочу делать базовый класс зависимым от классов, которые будут использованы в производных?
Это сообщение отредактировал(а) User008 - 7.5.2012, 10:35 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
В вашей 'фабрике' вызов метода фабричного метода makeX делается в конструкторе, а там виртуальность не работает (т.е. ваша фабрика всегда будет порождать класс X), о чем вам Randajad тонко намекнул
|
|||
|
||||
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
Да, спасибо, я это понял. А как сделать, чтобы при создании объекта поле становилось возвращаемым значением makeX? |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Вот пару вариантов
http://liveworkspace.org/code/659da452574b...d7a462d8403f101 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
Я правильно понимаю, что если класс делается шаблонным, то его определения должны быть написаны в хедере, соответственно в тех файлах, в которых подключается этот хедер, его определения будут дублироваться?
Это сообщение отредактировал(а) User008 - 8.5.2012, 14:55 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
да. шаблонный класс должен быть определен в каждой единице компиляции (кроме extern, но эта фича пока мало поддерживается)
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |