我想知道为什么我不能在该类定义中实例化一个类的对象。
例如,在下面的代码中,由于“字段'a'具有不完整的类型”,我得到了错误
但是在模板类C中没有这样的错误。
#include <iostream>
using namespace std;
template < template <typename> class TT> class X
{
};
template < typename T> class C
{
C no;
};
class obj
{
public:
obj a;
}
int main()
{
return 0;
}
如果您实际上尝试实例化,C
则可以,您将得到相同的错误。类模板通常不会导致编译错误:将它们实例化为类会导致以下错误:
template <typename T>
class C
{
C no;
};
int main()
{
C<int> c; // error: 'C<T>::no' has incomplete type
}
类的实例不能包含其自身的实例。那将需要无限的内存。一个C<int>
将包含C<int>
其中将包含C<int>
其中将包括一个C<int>
...
因此,更正式地说,不可能确定的大小,这是C<int>
标准禁止该程序使用的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句