【发布时间】:2017-12-24 13:33:52
【问题描述】:
我有以下模板基类:
template <class K>
class Base
{
protected:
Base(int tableSize) : m_tableSize(tableSize) {}
int doBaseWork(const K& data);
private:
int m_tableSize;
};
这个模板类继承了它:
template <class K>
class Derived : public Base<K>
{
public:
Derived (int tableSize) : Base(tableSize){}
private:
int doDerivedWork();
};
然后在我使用的代码中的某处:
Derived<int> testDerived(10);
使用 gcc 编译时出现以下错误
class 'Derived<K>' does not have any field named 'Base'
我做错了什么?似乎 gcc 认为我正在尝试初始化一个成员,但我只是在尝试初始化 base。
【问题讨论】:
-
你试过
: Base<K>(tableSize) {}吗? -
这行得通。这是 gcc 特有的吗?
-
不是 GCC。它对依赖名称、类名注入等有很长的解释。
-
但这似乎很容易从代码中推断出来。它只是为了保持一致性吗?
-
@Yotam 如果你想从多个
Base<T>s 继承怎么办?