[英]C++ typename and inner classes
我試過谷歌搜索,但我無法得出一個合適的答案。 任何C ++專家都可以告訴我為什么C ++要求你用typename關鍵字聲明OuterClass <T>
:: Innerclass?
我是數據結構課程的助教,我一直看到這個錯誤。 我知道要告訴我的學生他們需要將typename放在返回類型的前面,但我無法解釋為什么這是必需的。
謝謝。
那是因為模板中的兩階段名稱查找。 當編譯器看到Innerclass時,它必須知道該名稱是否是一個類型(例如,對於OuterClass的某些特化,可以是int類型的靜態成員)。 所以它假設它不是類型名稱,除非你這么說。 typename必須在模板中使用,並且只能在依賴於模板參數的名稱上使用。 HTH
例:
template <class T>
class X
{
typedef T XXX;
};
template<>
class X<char>
{
static int XXX;
};
template<class T>
class Y
{
// X<T>::XXX member; invalid XXX is not assumed to be a type!
typename X<T>::XXX member;
//we explicitly specify that XXX is a type; Later, upon instantiation, we will verify that
};
OuterClass<T>::Innerclass
因為Innerclass
表示一個type
(我可以從你的問題中看到)所以你需要在OuterClass<T>::Innerclass
之前添加關鍵字typename
示例:
template <class T>
void foo() {
T::iterator * iter;
...
}
沒有typename
T::iterator * iter;
將被解釋為T::iterator
和iter
之間的乘法運算
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.