GCC (MingW-w64) 找不到基础构造函数 (!?)
GCC (MingW-w64) cannot find base constructor (!?)
我正在编写一些 hashmap 实现并且偶然发现了一个非常特殊的问题。
所以我写了一个摘要class如下:
// 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: error: class 'DoubleHashMap' does
not have any field named 'HashMap'
: HashMap(bucketLength)
^
换句话说,就好像编译器找不到基构造函数一样。
我做错了什么或者这是 MingW-w64 中的错误?
编辑:尝试了 MingW 编译器的不同组合(MingW 4.8.3、TDM-GCC 4.8.1),它们都产生相同的错误。
您必须完整指定基地的名称class:
DoubleHashMap(unsigned int bucketLength = DEFAULT_BUCKET_LENGTH)
: HashMap<K, V>(bucketLength)
{
...
顺便说一句,您是否打算派生自 HashMap<K, V, HashFunc>
而不仅仅是 HashMap<K, V>
?
我正在编写一些 hashmap 实现并且偶然发现了一个非常特殊的问题。
所以我写了一个摘要class如下:
// 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: error: class 'DoubleHashMap' does not have any field named 'HashMap' : HashMap(bucketLength)
^
换句话说,就好像编译器找不到基构造函数一样。 我做错了什么或者这是 MingW-w64 中的错误?
编辑:尝试了 MingW 编译器的不同组合(MingW 4.8.3、TDM-GCC 4.8.1),它们都产生相同的错误。
您必须完整指定基地的名称class:
DoubleHashMap(unsigned int bucketLength = DEFAULT_BUCKET_LENGTH)
: HashMap<K, V>(bucketLength)
{
...
顺便说一句,您是否打算派生自 HashMap<K, V, HashFunc>
而不仅仅是 HashMap<K, V>
?