1

今日の 2 番目のテンプレートの質問です。

テンプレートクラスがあります:

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

};

myClass というクラスもあります。次のようなオブジェクトが必要です。

foo<myClass> myObject;

しかし、ここに問題があります。myObject.SubFoo から myObject へのポインタを取得できるようにしたいと考えています。つまり、クラス myClass のメンバーの 1 つは、テンプレート クラス foo のインスタンス化である必要があります。

だから私はできる:

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

}

ただし、これは機能しないようです。

./foo.h:103: エラー: 'foo::SubFoo' の型が不完全です

myClass を定義するとき、プログラムは次の行を見つけます。

   foo<myClass>* point2myClass;

foo の定義に進み、以下を見つけます。

     T SubFoo;

しかし、T、この場合 myClass はまだ定義されていない (それがプログラムが行っていたことです!) ため、T が何であるかがわからず、エラーが発生します。

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

どうすればこれを機能させることができますか??

どうもありがとう!

4

1 に答える 1

1

次のコードは、間違いなく問題なく動作するはずです。コードが異なる場合は、その場所を指定してください。

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

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

int main()
{
    X a;
}
于 2012-04-23T12:36:24.790 に答える