Здравствуйте,
может кто-нибудь просвятить меня в следующем вопросе:
Каким образом возможно(и возможно ли) осуществить приведение вниз по иерархии наследования от предка, наследование от которого было ВИРТУАЛЬНЫМ?
что-то вроде этого:
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 приложение завершается по исключению.
Здравствуйте, alzav, Вы писали:
A>может кто-нибудь просвятить меня в следующем вопросе: A>Каким образом возможно(и возможно ли) осуществить приведение вниз по иерархии наследования от предка, наследование от которого было ВИРТУАЛЬНЫМ?
Это делается при помощи 'dynamic_cast'.
A>И ещё: почему dynamic_cast не работает В ПРИНЦИПЕ? При любой попытке использования dynamic_cast приложение завершается по исключению.
Потому что ты забыл включить подержку RTTI в установках проекта. Без RTTI приведение типов вниз по иерархии при помощи 'dynamic_cast' не работает. О чем тебя, кстати, должен был предупредить компилятор при компиляции, если, конечно, ты не подавил соответствующие предупреждения.