簡體   English   中英

使用模板轉發類的聲明

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM