2011-09-14 14 views
1

私は、継承階層に対してshared_ptrだけを操作するクラスを持っています(かなり単純です。Baseから継承するA, B, Cなどいくつかのクラスがあります)。私はA、B、C ...のインスタンスを操作する必要はないので、それらは前方宣言されているだけです。しかし、をメソッドshared_ptr<Base>に渡そうとすると、コンパイラは、AがBaseから継承していることを知らないので、チョークします。 static_pointer_castまたは#includeのいずれかのクラス以外の方法がありますか?もしそうでなければ、あなたはどちらを選ぶでしょうか?前方宣言されたクラス階層のshared_ptr間のキャスト

編集:いくつかのコード

// in some file: (Base.h) 
class Base 
{ 
    /*code*/ 
} 

// in another file (A.h) 
class A : public Base 
{ 
} 

// in my file (impl.cpp) 
class A; // forward declaration  

void Dummy() 
{ 
    std::shared_ptr<A> myPtr; 

    // we have somewhere: void sillyFunction(shared_ptr<Base> foo) 
    sillyFunction(myPtr); // does not compile, as no conversion is found. 
} 
+1

コード例は、単語よりも優れた問題を示しています。 –

+0

実装を宣言から分離し、実装に派生クラスの完全な宣言を提供します。これはうまくいくはずです。それでも問題が解決しない場合は、詳細を投稿してください。 –

+0

宣言は実装とは別です。事は、私は名前の依存関係しか持たないようで、クラスA、B、Cに完全に依存したいとは思っていません。 – wendazhou

答えて

1

を追加すると、クラスAの#includetheヘッダをstatic_pointer_castorいずれかよりも、他の方法はありますか?実際に

号、#includeは(static_pointer_castどちらかが仕事や未定義の動作を起動するではないでしょう)それを適切に行うための唯一の方法です。不完全なサブクラスとスーパークラスの間に普通のポインタをキャストすることはできません。

関連する問題