模板循环依赖问题

时间:2012-04-23 12:29:33

标签: c++ templates circular-dependency

当天的第二个模板问题,什么是n00b:

我有一个模板类:

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

};

我还有一个名为myClass的类。我想有这样的对象:

foo<myClass> myObject;

但是,这就是问题所在,我希望能够从myObject.SubFoo获取指向myObject的指针。这意味着类myClass的一个成员应该是模板类foo的实例化。

所以我能做到:

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

}

然而,似乎这不起作用,因为

./ foo.h:103:错误:'foo :: SubFoo'类型不完整

定义myClass时,程序会找到行

   foo<myClass>* point2myClass;

这是foo的定义,它发现:

     T SubFoo;

但是T,在这种情况下是myClass,尚未定义(这是程序正在做的!),所以它不知道T是什么,因此错误。

如果我交换声明的顺序,它也会失败,因为不会定义“foo”。

我怎样才能做到这一点?

万分感谢!

1 个答案:

答案 0 :(得分:1)

以下代码,绝对可以正常工作。如果您的代码不同,请指明在哪里。

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

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

int main()
{
    X a;
}