0

I want to know if is it possible in C++ to do that :

 template <typename T> class A { T link;};
 template <typename U> class B { U link;};

 class AA : A<BB> {};
 class BB : B<AA> {};

because it generates the error :

 error: ‘BB’ was not declared in this scope
 error: template argument 1 is invalid

i have tryed to use anticipate declaration :

 class AA;
 class BB;

 class AA : A<BB> {};
 class BB : B<AA> {};

but it didn't work :

 In instantiation of ‘A<AA>’:
 error: ‘A<T>::s’ has incomplete type
 error: forward declaration of ‘struct AA’

thank you for your help,

4

2 回答 2

5

您的问题不是模板,而是无限嵌套(是的,从技术上讲,是使用不完整的类型来定义成员)。删除模板,你会遇到同样的问题:

struct A;
struct B;

struct A { B x; };

struct B { A y; };

从概念上讲,这是行不通的。因为,真的,你在这里得到的是一个A包含一个B包含一个A包含一个B......到无穷大的一个。乌龟一路下来。

然而,真正起作用的是使用指针成员。它们适用于不完整的类型,因此代码也适用——甚至适用于模板。

template <typename T> class A { T* link;};
template <typename U> class B { U* link;};
于 2012-05-08T10:40:16.850 回答
0

看看我之前问过的这个问题。如何转发声明模板类

基本上,如果您正向声明模板类型,则必须指定所有模板参数。

于 2012-05-08T10:13:04.100 回答