virtual inheritance
От: alzav  
Дата: 16.09.03 05:26
Оценка:
Здравствуйте,
может кто-нибудь просвятить меня в следующем вопросе:
Каким образом возможно(и возможно ли) осуществить приведение вниз по иерархии наследования от предка, наследование от которого было ВИРТУАЛЬНЫМ?

что-то вроде этого:

class Base
{
...
virtual void func (Base&)=0;
};

class Descendant : virtual public Base
{
virtual void func (Base& base)
{
...
(Descendant*)&base;
...
}
};


а в результате(MSVC):

...\point.h(97) : error C2635: cannot convert a 'VectorGraphics::Object<3,float>*' to a 'VectorGraphics::ElementaryObject<3,float>*'; conversion from a virtual base class is implied


И ещё: почему dynamic_cast не работает В ПРИНЦИПЕ? При любой попытке использования dynamic_cast приложение завершается по исключению.
Re: virtual inheritance
От: Андрей Тарасевич Беларусь  
Дата: 16.09.03 05:39
Оценка:
Здравствуйте, alzav, Вы писали:

A>может кто-нибудь просвятить меня в следующем вопросе:

A>Каким образом возможно(и возможно ли) осуществить приведение вниз по иерархии наследования от предка, наследование от которого было ВИРТУАЛЬНЫМ?

Это делается при помощи 'dynamic_cast'.

A>И ещё: почему dynamic_cast не работает В ПРИНЦИПЕ? При любой попытке использования dynamic_cast приложение завершается по исключению.


Потому что ты забыл включить подержку RTTI в установках проекта. Без RTTI приведение типов вниз по иерархии при помощи 'dynamic_cast' не работает. О чем тебя, кстати, должен был предупредить компилятор при компиляции, если, конечно, ты не подавил соответствующие предупреждения.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.