GCC (MingW-w64) 找不到基构造函数 (!?)

GCC (MingW-w64) cannot find base constructor (!?)

本文关键字:构造函数 找不到 MingW-w64 GCC      更新时间:2023-10-16

我正在编写一些哈希图实现,偶然发现了一个非常奇怪的问题。
所以我写了一个抽象类,如下所示:

// HashMap.hpp
template<typename K, typename V, typename HashFunc = std::hash<K>>
class HashMap
{
public:
    HashMap(unsigned int bucketLength = DEFAULT_BUCKET_LENGTH)
        : m_bucketsLength(bucketLength)
        , m_bucketsFilled(0)
    {
        m_keyValueVector.resize(m_bucketsLength, nullptr);
    }
    virtual ~HashMap()
    {
    }
...
};

并从中派生出一个实现:

// DoubleHashMap.hpp
#include "HashMap.hpp"
template<typename K, typename V, typename HashFunc = std::hash<K>>
class DoubleHashMap : public HashMap<K, V>
{
public:
    DoubleHashMap(unsigned int bucketLength = DEFAULT_BUCKET_LENGTH)
        : HashMap(bucketLength) // This is the line at which the build fails
    {
    }
...
};

使用Visual Studio 2013,一切都像一个魅力,但是当尝试使用MingW-w64 4.9.1构建它时,我收到以下错误:

DoubleHashMap.h:11:错误:类"DoubleHashMap"确实如此 没有任何名为"哈希图"的字段 : HashMap(bucketLength)
^

换句话说,就好像编译器找不到基构造函数一样。我做错了什么还是这是 MingW-w64 中的错误?

编辑:尝试了MingW编译器的不同组合(MingW 4.8.3,TDM-GCC 4.8.1),它们都产生相同的错误。

您必须完全指定基类的名称:

DoubleHashMap(unsigned int bucketLength = DEFAULT_BUCKET_LENGTH)
    : HashMap<K, V>(bucketLength)
{
  ...

顺便说一下,你有没有可能从HashMap<K, V, HashFunc>而不是仅仅HashMap<K, V>派生