使用模板转发类的声明

时间:2011-08-18 17:02:27

标签: c++ g++

我可以使用模板类的前向声明吗? 我试试:

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.

3 个答案:

答案 0 :(得分:5)

这不是模板问题。除非已完全定义,否则不能将类型用作按值变量。

答案 1 :(得分:4)

没有。在实例化时,编译器必须看到类模板的完整定义。对于非模板类也是如此。

答案 2 :(得分:2)

类的前向声明应该具有指定的完整参数列表。这将使编译器知道它的类型。

当一个类型被前向声明时,所有编译器都知道它存在的类型;它对其大小,成员或方法一无所知,因此称为不完整类型。因此,您不能使用该类型来声明成员或基类,因为编译器需要知道该类型的布局。

你可以:

1。声明成员指针或对不完整类型的引用  2. 声明接受/返回不完整类型的函数或方法  3.定义接受/返回指向不完整类型的指针/引用的函数或方法。

注意,在所有上述情况中,编译器不需要知道类型&amp;的确切布局。因此编译可以通过。

1的例子:

class YourClass;
class MyClass 
{
    YourClass *IncompletePtr;
    YourClass &IncompleteRef;
};