Base to Pointer에서 Derived 포인터로의 static_cast가 왜 "유효하지 않습니까?"
Node* SceneGraph::getFirstNodeWithGroupID(const int groupID)
{
return static_cast<Node*>(mTree->getNode(groupID));
}
mTree->는 getNode (그룹 ID)를 PCSNode *를 반환
그래서 나는이 코드가 있습니다. 노드는 공개적으로 PCSNode에서 파생됩니다.
내가 static_cast에서 발견 한 문서의 모든이 효과에 뭔가 말 : ". static_cast 연산자와 같은 파생 클래스에 대한 포인터를 기본 클래스에 대한 포인터를 변환하는 등의 작업에 사용할 수 있습니다"
그러나, 엑스 코드의 (GCC) 컴파일러 PCSNode *이 * 유효하지 않으며 허용되지 않는 노드에서 static_cast이라고 말했다. 이 이유
이유라도? 나는 C 스타일 캐스트로 전환하면 컴파일러에서 아무런 불만이 없습니다.
고마워.
업데이트 : 질문에 대한 답변이되었다하더라도, 나는 경우 다른 사람의 완전성에 대한 컴파일러 오류를 게시합니다이 같은 문제 :
error: Semantic Issue: Static_cast from 'PCSNode *' to 'Node *' is not allowed
당신이 정확한 컴파일러 오류를 할 수 있나요? 단지 거기에 const와 관련되거나 비슷한 것이 없다는 것을 확인하십시오. (당신이 설명하는 정보에 의해 그것이 작동해야 함) – Shiroko
"노드가 공개적으로 PCSNode에서 파생되었습니다"??? 나는''Node''가''PCSNode''에 대한 기본 클래스와 같은 "Node'"에서 공개적으로 파생 된 "PCSNode"를 의미한다고 생각합니다. 권리? –
PCSNode는 실제로 트리에 대한 포인터를 포함하고 있기 때문에 기본 클래스입니다. Node는 트리에있을 수있는 변형 노드입니다. – alk3ovation