template<class KeyType, class ValueType, class Hash = std::hash<KeyType> >
class HashMap {
public:
Hash hasher;
HashMap(Hash override_ = hasher) {
hasher = override_;
}
};
这是我的代码。我希望发生的是,如果构造函数未提供
hasher
的默认值,则将其保留,否则将其更改为new。我得到的是:invalid use of non-static data member 'hasher'
。我已经想到可以将hasher
替换为Hash()
作为默认值。但是,如果我不需要默认的Hash
对象而是更复杂的东西怎么办?为什么我的第一次尝试没有编译? 最佳答案
您试图将尚未创建对象的类的成员用作构造函数参数的默认值。除非成员是静态的,否则这将无法工作。为了做您想做的,您可以这样定义2个构造函数:
#include <map>
template<class KeyType, class ValueType, class Hash = std::hash<KeyType> >
class HashMap {
public:
Hash hasher;
HashMap(Hash override_) {
hasher = override_;
}
HashMap() {
}
};
关于c++ - 为什么不能将类构造函数参数设置为默认值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36811974/