Тип в dynamic_cast должен быть указателем или ссылкой на полный тип класса или void *

Я надеюсь, что есть кто-то, кто понимает, почему приведенный ниже код не работает. Я пытаюсь получить экземпляр PositionAttitudeTransform (класс Openscenegraph) из объекта узла osg::Node*. Но ниже жирным шрифтом выделена ошибка компилятора.

 void CameraPosCallbackUpdate::operator()(osg::Node* node, osg::NodeVisitor* nv)
{ 
   // other code goes here

    osg::PositionAttitudeTransform* pat = dynamic_cast<osg::PositionAttitudeTransform*> (node);

}

IntelliSense: тип в dynamic_cast должен быть указателем или ссылкой на полный тип класса или недействительным *

Пожалуйста, помогите мне с правильным способом доступа к моему объекту, и я был бы признателен за помощь в понимании проблемы, поскольку я считаю, что приведение должно быть возможным.

Иерархияhttp://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00529.html


person Kobojunkie    schedule 30.10.2012    source источник
comment
Вам нужно показать декларацию node. Как говорится в сообщении об ошибке, это должен быть указатель или ссылка на полный тип.   -  person Alok Save    schedule 30.10.2012
comment
код обновлен с более подробной информацией о том, откуда берется узел.   -  person Kobojunkie    schedule 30.10.2012
comment
Является ли тип, по сути, полным? Отсюда видно его определение?   -  person Luc Danton    schedule 30.10.2012
comment
Как сказал вам компилятор, вы не включили реализацию osg::PositionAttitudeTransform   -  person Denis Ermolin    schedule 30.10.2012


Ответы (1)


Я считаю, что вам нужно #include файл заголовка, который содержит тело class osg::PositionAttitudeTransform.
dynamic_cast выдает такую ​​ошибку, когда тело целевого класса не видно.

Вот похожая ошибка, воспроизведенная в g++.

person iammilind    schedule 30.10.2012
comment
Спасибо. Мне пришлось удалить #include ‹osg/Transform› и заменить его на #include ‹osg/PositionAttitudeTransform›. - person Kobojunkie; 30.10.2012