C++ 使用模板转发类声明

C++ 使用模板转发类声明,c++,g++,C++,G++,我可以为模板类使用转发声明吗? 我尝试: 模板 奎类; int main(){ 克米德克; 返回0; } 模板 类{}; 我得到: error: aggregate 'que<int> mydeque' has incomplete type and cannot be defined. 错误:聚合“que mydeque”的类型不完整,无法定义。 这不是模板问题。除非类型已完全定义,否则不能将其用作by-value变量。否。在实例化时,编译器必须看到类模板的完整定义。对于非模板

我可以为模板类使用转发声明吗?
我尝试:

模板
奎类;
int main(){
克米德克;
返回0;
}
模板
类{};
我得到:

error: aggregate 'que<int> mydeque' has incomplete type and cannot be defined.
错误:聚合“que mydeque”的类型不完整,无法定义。

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

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

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

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

你可以:

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

注意,在上述所有情况下,编译器不需要知道类型的确切布局&因此可以传递编译

示例1:

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

所以我可以使用指向未定义类的指针,但在主体出现之前无法创建对象?如何使用对不完整类型的引用?除了作为函数返回值之外?
class YourClass;
class MyClass 
{
    YourClass *IncompletePtr;
    YourClass &IncompleteRef;
};