构造函数错误:错误:在数字常量之前预期','或'...'

时间:2017-02-09 14:49:59

标签: c++ dictionary constructor

我有以下代码:

#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编译

1 个答案:

答案 0 :(得分:1)

在brace-or-equals初始值设定项中不允许使用常规括号。使用大括号:

std::unordered_multimap<StrPtr,StrPtr,decltype(hash1)> set{250000,hash1};

此限制可防止在使用括号的函数声明的某些情况下出现歧义。