模板类继承问题

时间:2011-05-17 09:19:41

标签: 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 field named 'Base'
};

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

还有一个问题:谁是对的?海湾合作委员会就在这里。非限定名称查找不会查找依赖基类,因此在Base范围内找不到Base<T>。您也可以将代码更改为以下符合标准的变体

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

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