así que tengo este código:¿Por qué un static_cast desde un puntero a base a un puntero a derivado es "inválido"?
Node* SceneGraph::getFirstNodeWithGroupID(const int groupID)
{
return static_cast<Node*>(mTree->getNode(groupID));
}
mTree-> getNode (ID_grupo) devuelve un PCSNode *. El nodo se deriva públicamente de PCSNode.
Todos los documentos que he encontrado en static_cast dicen algo en este sentido: "El operador static_cast se puede usar para operaciones tales como convertir un puntero a una clase base en un puntero a una clase derivada."
Sin embargo, el compilador de XCode (GCC) dice que static_cast es de PCSNode * a Node * no es válido y no está permitido.
¿Alguna razón por la que esto es? Cuando lo cambio a un modelo C, no hay quejas del compilador.
Gracias.
ACTUALIZACIÓN: A pesar de que la pregunta fue respondida, voy a publicar el error del compilador para la integridad en caso de que alguien más tiene el mismo problema:
error: Semantic Issue: Static_cast from 'PCSNode *' to 'Node *' is not allowed
¿Se puede poner el compilador de error exacto? Solo para asegurarse de que no haya nada relacionado o similar allí. (según la información que describa, debería funcionar) – Shiroko
"El nodo se deriva públicamente de PCSNode" ??? Supongo que quiere decir que '' PCSNode' se deriva públicamente de 'Node'" que es lo mismo que "' Node' es una clase base para 'PCSNode'". ¿Derecha? –
PCSNode es en realidad la clase base porque contiene los punteros para el árbol, el nodo es un nodo transformacional que puede estar en un árbol. – alk3ovation