我有以下代码:

#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/

10-11 14:19