你能告诉我,我错过了什么?
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'
};
答案 0 :(得分:8)
template <class T> struct Derived : Base<T>
{
Derived():Base<T>(T()) {}
};
答案 1 :(得分:1)
还有一个问题:谁是对的?海湾合作委员会就在这里。非限定名称查找不会查找依赖基类,因此在Base
范围内找不到Base<T>
。您也可以将代码更改为以下符合标准的变体
Derived():Derived::Base(T()) {}
如果我没记错的话,这只有GCC4.5支持。早期版本没有正确实现注入的类名查找。