0
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模式下不允许基于范围的'for'循环”

完全困惑,如何迭代它?

为什么有时是c++11,有时是c++98?

4

2 回答 2

5

听起来您需要将编译器设置为 C++11 模式。错误信息:

“C++98 模式下不允许基于范围的‘for’循环”

指出这一点。

您执行此操作的方式取决于您的编译器。

当您看到此消息时:

得到一个错误说“auto”已经改变了c ++ 11中的含义

您的编译器仍处于 C++98/03 模式。该关键字auto存在于 C++03 中,但在大多数情况下它没有任何意义,因为默认情况下变量会自动存储。(您可以通过用 标记变量来使变量进入静态存储static。也就是说,autostatic原样signedunsigned在 C++98/03 中)。

因为这个含义在 C++98/03 中并没有真正有用,并且因为在 C++11 中含义发生了变化,所以 C++03 模式下的编译器可能会抱怨使用 ofauto并带有警告。如果您将警告视为错误,则会变成错误。因此,您看到的消息。

于 2013-01-09T17:57:49.750 回答
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);
}
于 2013-01-09T18:02:20.210 回答