2012-08-28 5 views
7

テンプレート依存クラスの循環依存性に問題があります。コードサンプルがあります:C++ - 循環依存(テンプレートベースクラスの内部クラスのサブクラスを使用)

template <typename T> struct A 
{ 
    typedef typename T::C D; 
    //typename T::C c; 
}; 

struct B : public A<B> 
{ 
    struct C {}; 
}; 

私はBをインスタンス化しようとすると、私はコンパイラエラーを取得:「C」は「B」(MSVC)のメンバーまたは不完全型 'の不正使用ではありません構造体B '(GCC)。
サンプルを変更して動作させるには、どのような方法が最適ですか?

+3

できません。解決しようとしている問題のもう少し完全な例を提供し、コードのリファクタリングを見てみましょう。 –

答えて

6
struct B_base { struct C {}; }; 
strucr B : A<B_base>, B_base { }; 
+0

'A'がメンバ宣言にパラメータ型' T'を置くCRTPテンプレートである場合には役に立ちません。その場合、 'C'に追加のテンプレートパラメータを設定するだけです。 – aschepler