I am hoping there is someone out there who understands why the code below fails. I am trying to get an instance of PositionAttitudeTransform (Openscenegraph class) from an osg::Node* node object. But there is the compiler error below in bold.
void CameraPosCallbackUpdate::operator()(osg::Node* node, osg::NodeVisitor* nv)
{
// other code goes here
osg::PositionAttitudeTransform* pat = dynamic_cast<osg::PositionAttitudeTransform*> (node);
}
IntelliSense: the type in a dynamic_cast must be a pointer or reference to a complete class type, or void *
Please help me with correct way to access my object and I would appreciate help in understanding what the problem here is since I believe the cast should be possible.
http://www.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a00529.html
The primary purpose for the dynamic_cast operator is to perform type-safe downcasts. A downcast is the conversion of a pointer or reference to a class A to a pointer or reference to a class B , where class A is a base class of B .
[edit] SyntaxIf the cast is successful, dynamic_cast returns a value of type new-type. If the cast fails and new-type is a pointer type, it returns a null pointer of that type. If the cast fails and new-type is a reference type, it throws an exception that matches a handler of type std::bad_cast.
dynamic_cast will no longer throw an exception when type-id is an interior pointer to a value type, with the cast failing at runtime. The cast will now return the 0 pointer value instead of throwing.
A failing dynamic cast to a reference type throws a bad_cast exception. A dynamic cast with a reference is a good way to test for a coding assumption.
I believe you have to #include
the header file which contains the body of class osg::PositionAttitudeTransform
.dynamic_cast
gives such error when the body of the destination class is not visible.
Here is the similar error reproduced in g++.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With