5

我正在尝试使用g++-4.4.

我有这段代码,

const std::string cnw::restoreSession(const std::vector<string> &inNwsFile) {
   for (std::string &nwFile : inNwsFile){
       // some...
   }
}

由于此错误,我无法编译:

CNWController.cpp:154: error: expected initializer before ‘:’ token

你能给我一些关于如何解决这个问题的建议吗?

4

1 回答 1

13

您的编译器太旧,无法支持基于范围的for语法。根据GNU,它首先在 GCC 4.6 中得到支持。GCC 还要求您通过提供命令行选项-std=c++11c++0x在与您一样旧的编译器上明确请求 C++11 支持。

如果您无法升级,那么您将需要老式的等价物:

for (auto it = inNwsFile.begin(); it != inNwsFile.end(); ++it) {
    std::string const &nwFile = *it; // const needed because inNwsFile is const
    //some...
}

我相信auto在 GCC 4.4 中可用(只要您启用 C++0x 支持),以节省您编写std::vector<string>::const_iterator.

如果您确实需要const对向量元素的非引用,那么无论您使用哪种循环样式,您都需要const从函数参数中删除 。

于 2013-05-02T15:46:54.557 回答