我在一本书中读到,迭代矢量的一种较短的方法如下:
for (auto x : v)
{
cout << x << "\n";
}
当我在编译器中尝试相同时,我收到两条错误消息:
'auto'改变了C ++ 11中的含义,请删除它基于'for'循环的范围,仅适用于c ++ 11“和”'x'可能在此函数中未初始化使用
有人可以指出错误和解决方案吗?
你的语法是正确的。请记住,你正在拍摄x
中每个元素的副本,你可能想要使用const auto&
代替。
您需要在编译器中启用C ++ 11 - 如果您使用gcc或clang,则只需传递-std=c++11
标志即可。
您确定要使用C ++ 11编译器编译代码吗?
使用gcc
,您需要-std=c++11
标志:
g++ -std=c++11
clang
也是如此:
clang++ -std=c++11
错误是您使用C ++ 11标准中引入的语言功能,同时使用不支持C ++ 11的编译器(在模式下)进行编译。
解决方案是使用支持C ++ + 11的编译器(在模式下)。如果您的编译器支持C ++ 11(它可能确实如此,因为它知道auto
意义的变化),那么它的文档将指定如何启用C ++ 11或更高版本的标准模式。
你用的是什么编译器?
gcc(tdm 64-1)5.1.0
编译器的manual说:
要在GCC中选择此标准,请使用选项-std = c ++ 11;要获得标准所需的所有诊断,您还应指定-pedantic