我正在尝试使用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
你能就如何解决这个问题给我一些建议吗?
答案 0 :(得分:12)
您的编译器太旧,无法支持基于范围的for
语法。根据{{3}},它首先在GCC 4.6中得到支持。 GCC还要求您通过在编译器上提供命令行选项-std=c++11
或c++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
。