我正在尝试在NetBeans中设置一个std::map<std::string, std::vector<int>> arrayInfo84
类型的变量,但这会导致代码帮助抛出合适的说法
无法解析标识符arrayInfo84
意外的令牌:地图
意外的令牌:;
我的其他具有更基本数据类型的地图变量(即string
int
等)工作正常。这似乎是向量的一个问题。在有人问之前,是的,我的标题中有#include<vector>
。
我猜这是支持C ++ 11的一些问题。但是,我无法弄清楚如何解决这个问题。我的工具集是CygWin的最新版本。
答案 0 :(得分:4)
问题可能在于定义:
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
,以及代码分析器(如果它不会自动跟随编译器)。