错误:在':'标记之前的预期初始化程序

时间:2013-05-02 15:44:11

标签: c++ linux porting

我正在尝试使用g++-4.4编译一些C ++代码(可以使用Windows上的Visual Studio 2012进行编译)。

我有这段代码,

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

我因为这个错误而无法编译:

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

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

1 个答案:

答案 0 :(得分:12)

您的编译器太旧,无法支持基于范围的for语法。根据{{​​3}},它首先在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...
}

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

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