2011-05-02 166 views
4

雖然在visual C++中接受下面的代碼,但g ++會產生錯誤: 「派生類沒有任何字段名」Base「 它跟隨標準嗎?模板基類初始化

template <class T> 
class Base 
{ 
public: 
    Base(){}; 
}; 

template <class T> 
class Derived:public Base<T> 
{ 
public: 
    Derived():Base(){} 
}; 

BTW:既接受

Derived():Base<T>(){} 

這樣與此同時,我會按照GCC

回答

6

MSVC++是不正確的。 Base是一個模板,而不是一個類型。

注意,在通常情況下,Base中的Derived<T>的範圍,這意味着它會首先找到Base<T>繼承注入的類名,它指的是類型Base<T>擡頭。但是,因爲您有一個從屬基類,所以從Base<T>繼承的名稱未找到(基類範圍未查找到)。