std::vector<std::string> endpointLSRKey;
for(auto it = endpointLSRKey.begin(); it != endpointLSRKey.end(); ++it) {
lsr->setItem(0, "", *it, address);
}
然后得到一个错误说“auto”改变了c ++ 11中的含义,删除它!
所以我改变它:
for(std::string& str : endpointLSRKey){
lsr->setItem(0, "", str, address);
}
然后得到一个错误,说“在C ++ 98模式下不允许'循环'基于范围”
完全糊涂了,如何迭代它?
为什么有时它是c ++ 11而有时它是c ++ 98?
答案 0 :(得分:5)
听起来您需要将编译器设置为C ++ 11模式。错误消息:
“C ++ 98模式中不允许使用'基于范围'的循环”
指出这一点。
执行此操作的方式取决于您的编译器。
当您看到此消息时:
得到错误说“auto”改变了c ++ 11中的含义
您的编译器仍处于C ++ 98/03模式。关键字auto
存在于C ++ 03中,但在大多数情况下没有意义,因为默认变量是自动存储。 (您可以通过使用static
标记变量进入静态存储。即auto
为static
,signed
为unsigned
(在C ++ 98/03)。
因为这个含义在C ++ 98/03中没有用,并且因为C ++ 11中的含义发生了变化,所以C ++ 03模式下的编译器可能会抱怨使用auto
警告。如果您将警告视为错误,则会将其变为错误。因此,您正在看到的消息。
答案 1 :(得分:2)
我应该如何在c ++ 98mode中进行迭代?
无论
for(std::vector<std::string>::iterator it = endpointLSRKey.begin(); it != endpointLSRKey.end(); ++it) {
lsr->setItem(0, "", *it, address);
}
或
for(std::size_t i = 0; i < endpointLSRKey.size(); ++i) {
lsr->setItem(0, "", endpointLSRKey[i], address);
}