1

当天的第二个模板问题,多么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”不会被定义。

我怎样才能使这项工作?

太感谢了!

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 回答