[英]forward declaration of class using templates
我可以使用模板類的前向聲明嗎?
我嘗試:
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.
這不是模板問題。 除非已完全定義,否則不能將類型用作按值變量。
在實例化時,編譯器必須看到類模板的完整定義。 對於非模板類也是如此。
類的前向聲明應該具有指定的完整參數列表。 這將使編譯器知道它的類型。
當一個類型被向前聲明時,所有編譯器都知道它存在的類型; 它對它的大小,成員或方法一無所知,因此它被稱為不完全類型 。 因此,您不能使用該類型來聲明成員或基類,因為編譯器需要知道該類型的布局。
您可以:
1.聲明成員指針或對不完整類型的引用。
2. 聲明接受/返回不完整類型的函數或方法。
3.定義接受/返回指向不完整類型的指針/引用的函數或方法。
請注意,在所有上述情況下,編譯器不需要知道類型的確切布局,因此可以傳遞編譯。
示例1:
class YourClass;
class MyClass
{
YourClass *IncompletePtr;
YourClass &IncompleteRef;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.