GCC (MingW-w64) 找不到基础构造函数 (!?)
Posted
技术标签:
【中文标题】GCC (MingW-w64) 找不到基础构造函数 (!?)【英文标题】:GCC (MingW-w64) cannot find base constructor (!?) 【发布时间】:2015-01-13 19:25:44 【问题描述】:我正在编写一些 hashmap 实现,但偶然发现了一个非常特殊的问题。 所以我写了一个抽象类如下:
// 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”的字段 : HashMap(bucketLength) ^
换句话说,就好像编译器找不到基本构造函数一样。 我做错了什么还是这是 MingW-w64 中的错误?
编辑:尝试了 MingW 编译器的不同组合(MingW 4.8.3、TDM-GCC 4.8.1),它们都产生相同的错误。
【问题讨论】:
【参考方案1】:您必须完全指定基类的名称:
DoubleHashMap(unsigned int bucketLength = DEFAULT_BUCKET_LENGTH)
: HashMap<K, V>(bucketLength)
...
顺便说一句,您是否有可能从HashMap<K, V, HashFunc>
派生而不仅仅是HashMap<K, V>
?
【讨论】:
就是这样。有趣的是 MSVC 是如何编译代码的。 “顺便说一句,您是否有可能从 HashMap以上是关于GCC (MingW-w64) 找不到基础构造函数 (!?)的主要内容,如果未能解决你的问题,请参考以下文章
传递指向成员函数的指针在 MinGW-w64 中编译,但不在 gcc 中
getline 函数未使用 mingw-w64 gcc 编译
ubuntu32bit的系统如何配置mingw-w64的交叉编译toolchain?