我有以下代码:
#include <memory>
#include <functional>
#include <string>
#include <unordered_map>
typedef std::shared_ptr<std::string> StrPtr;
auto hash1 = [](const StrPtr ptr) { return std::hash<std::string>()(*ptr); };
...
class Actor {
...
private:
std::unordered_multimap<StrPtr,StrPtr,decltype(hash1)> set(250000,hash1);
...
};
如果要编译,则会出现以下错误:
Actor.hpp:15:68: error: expected identifier before numeric constant
std::unordered_multimap<StrPtr,StrPtr,decltype(hash1)> set(250000,hash1);
^
Actor.hpp:15:68: error: expected ‘,’ or ‘...’ before numeric constant
查看unordered_multimap的构造函数定义,似乎与我的初始化没有矛盾。这里有什么问题?
我用gcc 4.8编译
最佳答案
花括号或等号初始化程序中不允许使用常规括号。使用大括号:
std::unordered_multimap<StrPtr,StrPtr,decltype(hash1)> set{250000,hash1};
此限制可防止在某些情况下使用括号的函数声明会引起歧义。
关于c++ - 构造函数错误:错误:数值常量前应为“,”或“…”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42139773/