模板基类初始化

lka*_*nab 4 c++ gcc templates initialization

在visual c ++中接受下面的代码,g ++将生成错误:"类Derived没有任何字段名Base",它遵循标准?

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

template <class T>
class Derived:public Base<T>
{
public:
    Derived():Base(){}
};
Run Code Online (Sandbox Code Playgroud)

顺便说一句:都接受

Derived():Base<T>(){}
Run Code Online (Sandbox Code Playgroud)

所以,我会跟着gcc

Joh*_*itb 6

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

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