6

だから私はこのコードを持っています:

Node* SceneGraph::getFirstNodeWithGroupID(const int groupID)
{
    return static_cast<Node*>(mTree->getNode(groupID));
}

mTree->getNode(groupID) は PCSNode* を返します。Node は PCSNode からパブリックに派生しています。

static_cast で見つけたすべてのドキュメントは、この効果について次のように述べています。「static_cast 演算子は、基本クラスへのポインターを派生クラスへのポインターに変換するなどの操作に使用できます。」

しかし、XCode の (GCC) コンパイラーは、 static_cast が PCSNode* から Node* へのものであることは無効であり、許可されていないと言っています。

これは何か理由がありますか?C スタイルのキャストに切り替えると、コンパイラからの苦情はありません。

ありがとう。

更新:質問には回答がありましたが、他の誰かが同じ問題を抱えている場合に備えて、完全を期すためにコンパイラ エラーを投稿します。

エラー: セマンティックの問題: 'PCSNode *' から 'Node *' への Static_cast は許可されていません

4

1 に答える 1

25

その理由は、 の定義がコンパイラから見えないことが最もありそうですNode(たとえば、前方宣言されているだけかもしれません: class Node;)。

自己完結型の例:

class Base {};

class Derived; // forward declaration

Base b;

Derived * foo() {
    return static_cast<Derived*>( &b ); // error: invalid cast
}

class Derived : public Base {}; // full definition

Derived * foo2() {
    return static_cast<Derived*>( &b ); // ok
}
于 2011-04-27T18:37:42.273 に答える