我正在尝试设置类型为 std::map<std::string, std::vector<int>> arrayInfo84
的变量在 NetBeans 中,但这导致代码协助发出一个合适的说法
Unable to resolve Identifier arrayInfo84
Unexpected token: map
Unexpected token: ;
我的其他具有更多基本数据类型(即 string
int
等)的 map 变量工作正常。这似乎是 vector 的问题。在有人问之前,是的,我确实有 #include<vector>
在我的标题中。
我猜这是支持 C++11 的一些问题。但是,我不知道如何解决这个问题。我的工具集是最新版本的CygWin。
最佳答案
问题可能出在定义上:
std::map<std::string, std::vector<int>> arrayInfo84;
// here ^^ is the problem
最后一个标记是 >>
,它在 C++11 之前的版本 (C++98/C++03) 中被解析为位移运算符。这是因为 C++ 使用所谓的 "principle of maximal munch"。 .由于这个事实,嵌套模板必须始终使用 >>
作为它们的分隔符,所以上面的声明应该是
std::map<std::string, std::vector<int> > arrayInfo84;
// note the additional space here ^^^
但是,C++11 放宽了规则,现在允许使用 >>>
作为嵌套模板的分隔符,因此您的定义在 C++11 中有效,但不是在 C++98/C++03 中有效。
您的 Netbeans 代码分析器可能不遵循最新的 C++11 规则,这就是您可能收到警告的原因。确保将编译器配置为支持 C++11,例如传递标志 -std=c++11
,以及代码分析器(如果它没有自动跟随编译器)。
关于c++ - 带有 vector 值声明的 Netbeans IDE 8.0.2 C++ 代码帮助问题映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31061084/