2011-05-02 113 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>继承的名称未找到(基类范围未查找到)。