使用自动变量打印矢量的内容

问题描述 投票:2回答:3

我在一本书中读到,迭代矢量的一种较短的方法如下:

for (auto x : v) 
{
  cout << x << "\n";
}

当我在编译器中尝试相同时,我收到两条错误消息:

'auto'改变了C ++ 11中的含义,请删除它基于'for'循环的范围,仅适用于c ++ 11“和”'x'可能在此函数中未初始化使用

有人可以指出错误和解决方案吗?

c++ c++11 gcc clang
3个回答
7
投票

你的语法是正确的。请记住,你正在拍摄x中每个元素的副本,你可能想要使用const auto&代替。

您需要在编译器中启用C ++ 11 - 如果您使用gcc或clang,则只需传递-std=c++11标志即可。


3
投票

您确定要使用C ++ 11编译器编译代码吗?

使用gcc,您需要-std=c++11标志:

g++ -std=c++11

clang也是如此:

clang++ -std=c++11

1
投票

错误是您使用C ++ 11标准中引入的语言功能,同时使用不支持C ++ 11的编译器(在模式下)进行编译。

解决方案是使用支持C ++ + 11的编译器(在模式下)。如果您的编译器支持C ++ 11(它可能确实如此,因为它知道auto意义的变化),那么它的文档将指定如何启用C ++ 11或更高版本的标准模式。


你用的是什么编译器?

gcc(tdm 64-1)5.1.0

编译器的manual说:

要在GCC中选择此标准,请使用选项-std = c ++ 11;要获得标准所需的所有诊断,您还应指定-pedantic

© www.soinside.com 2019 - 2024. All rights reserved.