模板循环依赖关系问题

template circular dependency issue

本文关键字:关系 问题 依赖 循环      更新时间:2023-10-16

当天的第二个模板问题,真是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"。

我怎样才能做到这一点??

谢谢一百万!

下面的代码,应该可以正常工作。如果您的代码不同,请指定位置。

template < typename T >
struct A
{
    T x;
};
struct X
{
    A<X>* x;
};
int main()
{
    X a;
}