2012-04-23 11 views
1

第2のテンプレート質問、何N00B:テンプレート循環依存の問題

私はテンプレートクラスを持っている:

template <class T> 
class foo{ 
    private: 
    //... 
    T SubFoo; 
    //... 

}; 

私はまた、MyClassのと呼ばれるクラスを持っています。私は種類のオブジェクトを持っているしたいと思います:

foo<myClass> myObject; 

をしかし、ここで問題だ、私はmyObject.SubFooからmyObjectというのポインタを取得できるようにしたいと思います。つまり、クラスmyClassのメンバーの1人は、テンプレートクラスfooのインスタンス化でなければなりません。

だから私は行うことができます。エラー: 'FOO :: SubFooは' 不完全な型

を持って

class myClass{ 
    //... 
    foo<myClass>* point2myClass; 

} 

をしかし、./foo.h:103

ので、これは動作しないようです

のMyClassを定義し、プログラムはライン

foo<myClass>* point2myClass; 

を見つけるとそれがfooのdefintionに行くと、それF INDS:

 T SubFoo; 

しかしTは、この場合にはMyClassのは、まだ定義されていない(つまり、プログラムが何をしていたかである!)、それは、Tが何であるかわからないので、エラー。

宣言の順序を入れ替えると、 "foo"が定義​​されないため失敗します。

どうすればこの作業を行うことができますか?

ありがとうございます!

+2

コード例は正確ですか?あなたはあなたが得ているエラーを得るべきではないからです。 –

答えて

1

次のコードは間違いなくうまくいきます。コードが異なる場合は、どこに指定してください。

template < typename T > 
struct A 
{ 
    T x; 
}; 

struct X 
{ 
    A<X>* x; 
}; 

int main() 
{ 
    X a; 
} 
+0

はい。それは動作します。そうすればうまくいくはずです...それは別のものかもしれません。あなたに感謝します。 – elelias

+0

おそらく、テンプレートをインスタンス化することはまったくありません。 – jpalecek