模板基类初始化

时间:2011-05-02 18:18:02

标签: c++ templates gcc initialization

在visual c ++中,接受下面的代码,g ++将生成错误: “类Derived没有任何字段名Base” 哪个符合标准?

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

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

BTW:都接受

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

所以,我会跟着gcc

1 个答案:

答案 0 :(得分:6)

MSVC ++不正确。 Base是模板,而不是类型。

请注意,在通常情况下,在Base的范围内查找Derived<T>,这意味着它将首先找到从Base<T>继承的注入类名,类型Base<T>。但是,由于您具有从属基类,因此找不到从Base<T>继承的名称(不会查看基类范围)。