2

親のネストされたクラスから継承するネストされたクラスのコンストラクターを、そのコンストラクターを使用して作成しようとしています。基本的に:

DerivedList<T>::DerivedNested::DerivedNested(DerivedNode*& ptr)
  : BaseList<T>::BaseNested::BaseNested(ptr)
{}

BaseNestedのコンストラクターのプロトタイプは次のようになります。

BaseList<T>::BaseNested::BaseNested(BaseNode*& ptr)

(そして、コード内に上記のポインターのアドレスが必要なため、参照によってptrパラメーターを取得する必要があります)

DerivedNode*をBaseNode*にキャストする必要があると思いましたが、:static_cast :: BaseNode *>(ptr)は参照ではないため、一致する関数が見つかりません。static_cast:: BaseNode *&>(ptr)無効なキャストエラーが発生します。

dynamic_castについても同じことが言えます。reinterpret_castはコンパイルされますが、実行中に何か間違ったものになります。

その親コン​​ストラクターを呼び出す方法を知っている人はいますか?

4

1 に答える 1

4

参照が必要だと思われる場合は、後でポインタを変更したいことが原因である可能性があります。問題は、派生クラスのポインタの型がでDerivedNode*ありBaseNode*、基本クラスにあることです。DerivedNode2*基本クラスがそのポインタへのに影響を与える場合はどうなりますか?

セッターを使用するか、ロジックを基本クラスから派生クラスに移動する必要があります。

于 2012-12-20T12:40:43.170 に答える