【问题标题】:Printing contents of a vector using auto variable使用自动变量打印向量的内容
【发布时间】:2018-08-09 10:08:55
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你用的是什么编译器?
  • 我正在使用 CodeLite v10.0.0
  • @SayangdiptoChakraborty CodeLite 不是编译器。
  • @SayangdiptoChakraborty 那是编辑器,不是编译器,你用的是哪个编译器?
  • 谢谢大家,我没有在 CodeLite 中启用 C++11。它现在正在工作。

标签: c++ c++11 gcc clang


【解决方案1】:

你的语法是正确的。请注意,虽然您正在复制 x 中的每个元素,但您可能希望改用 const auto&amp;

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

【讨论】:

  • 好的,谢谢。我的 IDE 中没有启用 C++11 和 14。
【解决方案2】:

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

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

g++ -std=c++11

clang 也一样:

clang++ -std=c++11

【讨论】:

  • 好的,谢谢。我的 IDE 中没有启用 C++11 和 14。
【解决方案3】:

错误是您使用了 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

【讨论】:

    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2021-07-15
    • 1970-01-01
    相关资源
    最近更新 更多