【问题标题】:base template class can't be constructed无法构造基本模板类
【发布时间】: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&lt;K&gt;(tableSize) {}吗?
  • 这行得通。这是 gcc 特有的吗?
  • 不是 GCC。它对依赖名称、类名注入等有很长的解释。
  • 但这似乎很容易从代码中推断出来。它只是为了保持一致性吗?
  • @Yotam 如果你想从多个Base&lt;T&gt;s 继承怎么办?

标签: c++ gcc


【解决方案1】:

你应该写模板参数

Base<K>(tableSize)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2017-09-12
    • 2020-01-16
    • 2021-08-09
    相关资源
    最近更新 更多