我可以使用模板类的前向声明吗? 我试试:
template<class que_type>
class que;
int main(){
que<int> mydeque;
return 0;
}
template<class que_type>
class que {};
我明白了:
error: aggregate 'que<int> mydeque' has incomplete type and cannot be defined.
答案 0 :(得分:5)
这不是模板问题。除非已完全定义,否则不能将类型用作按值变量。
答案 1 :(得分:4)
没有。在实例化时,编译器必须看到类模板的完整定义。对于非模板类也是如此。
答案 2 :(得分:2)
类的前向声明应该具有指定的完整参数列表。这将使编译器知道它的类型。
当一个类型被前向声明时,所有编译器都知道它存在的类型;它对其大小,成员或方法一无所知,因此称为不完整类型。因此,您不能使用该类型来声明成员或基类,因为编译器需要知道该类型的布局。
你可以:
1。声明成员指针或对不完整类型的引用 2. 声明接受/返回不完整类型的函数或方法 3.定义接受/返回指向不完整类型的指针/引用的函数或方法。
注意,在所有上述情况中,编译器不需要知道类型&amp;的确切布局。因此编译可以通过。
1的例子:
class YourClass;
class MyClass
{
YourClass *IncompletePtr;
YourClass &IncompleteRef;
};