C++ 模板类继承问题

C++ 模板类继承问题,c++,templates,visual-c++,inheritance,gcc,C++,Templates,Visual C++,Inheritance,Gcc,你能告诉我,我错过了什么吗 template <class T> struct Base { T data; Base(const T &_data):data(_data) { } }; template <class T> struct Derived : Base<T> { Derived():Base(T()) {} //error: class 'Derived<T>' does not have any

你能告诉我,我错过了什么吗

template <class T> struct Base
{
    T data;
    Base(const T &_data):data(_data) { }
};

template <class T> struct Derived : Base<T>
{
    Derived():Base(T()) {} //error: class 'Derived<T>' does not have any field named 'Base'
};
模板结构库
{
T数据;
Base(const T&_data):数据(_data){
};
派生的模板结构:基
{
派生():Base(T()){}//错误:类“派生”没有任何名为“Base”的字段
};
模板结构派生:基
{
派生():基(T()){}
};

还有一个问题:谁是对的?GCC就在这里。非限定名称查找不会查找依赖的基类,因此不会在
base
的范围内找到
base
。您也可以将代码更改为以下标准一致变体

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

如果我没记错的话,这仅由GCC4.5支持。早期版本没有正确实现注入的类名查找

正如其他人所指出的,如果将
Base(T())
更改为
Base(T())
,它就会编译。但有人能告诉我们这两个编译器中哪一个是正确的吗?一个很好的帮助是基本的typedef
typedef base Super
:)当您的基础中有多个模板参数时,这将非常有帮助。
Derived():Derived::Base(T()) {}