我有以下代码:
#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编译
答案 0 :(得分:1)
在brace-or-equals初始值设定项中不允许使用常规括号。使用大括号:
std::unordered_multimap<StrPtr,StrPtr,decltype(hash1)> set{250000,hash1};
此限制可防止在使用括号的函数声明的某些情况下出现歧义。