【发布时间】:2021-12-15 18:47:41
【问题描述】:
我有一个名为 main.cpp 的文件,我试图在其中声明一个 unordered_map,如下所示。
std::unordered_map<std::string, std::set<int>> firstSets;
然后我尝试将一个新的(键,值)对插入到映射中,如下所示。
std::string decl = "decl";
std::set<int> declFirstSet = {VOID_TOK, INT_TOK, FLOAT_TOK, BOOL_TOK};
firstSets[decl] = declFirstSet;
当我这样做时,我得到以下编译器错误。
C++ 需要所有声明的类型说明符
firstSets[decl] = declFirstSet;
数组的大小具有非整数类型“std::string”(又名“basic_string”)
firstSets[decl] = declFirstSet;
所以当我实际上想要插入它时,它似乎认为我在声明“firstSets”。它似乎将“firstSets”视为一个数组而不是unordered_map。我该如何解决这个问题?
【问题讨论】:
-
这些声明/表达式是否在全局范围内(函数之外)?
-
是的。 @1201ProgramAlarm
-
把insert放在main里面就可以了
-
你不能在全局范围内有表达式。
firstSets[decl] = declFirstSet;需要在函数内部。您也可以在定义它时使用构造函数对其进行初始化。 -
好的,谢谢。为什么不能在全局范围内使用表达式?
标签: c++ compiler-errors unordered-map