为什么我在C ++中收到基于范围的for循环的警告?

时间:2018-03-14 04:14:43

标签: c++ c++11 for-loop warnings compiler-warnings

我目前正在使用Bjarne Stroustrup的书(第2版)自学C ++。在其中一个示例中,他使用for-for-loop来读取向量中的元素。当我为自己编写和编译代码时,我得到了这个警告。当我运行代码时,它似乎正在工作并计算平均值。为什么我收到这个警告,我应该忽略它吗?另外,为什么范围 - 在示例中使用int而不是double,但仍返回double?

temp_vector.cpp:17:13: warning: range-based for loop is a C++11 
extension [-Wc++11-extensions]

这是代码

#include<iostream>
#include<vector>

using namespace std;

int main ()
{
  vector<double> temps;     //initialize a vector of type double

  /*this for loop initializes a double type vairable and will read all 
    doubles until a non-numerical input is detected (cin>>temp)==false */
  for(double temp; cin >> temp;)
    temps.push_back(temp);

  //compute sum of all objects in vector temps
  double sum = 0;

 //range-for-loop: for all ints in vector temps. 
  for(int x : temps)     
    sum += x;

  //compute and print the mean of the elements in the vector
      cout << "Mean temperature: " << sum / temps.size() << endl;

  return 0;
}

在类似的说明中:我应该如何根据循环标准来查看范围?

3 个答案:

答案 0 :(得分:7)

[gstr][1-4][a-cA-D]|gstr[1-4] 传递给编译器;你的(古代)编译器默认为C ++ 03,并警告你它正在接受一些较新的C ++结构作为扩展。

Ranged base for扩展为基于迭代器的for循环,但错别字的机会较少。

答案 1 :(得分:3)

由于没有人展示如何在g ++中使用C ++ 11,因此看起来像这样...

g++ -std=c++11 your_file.cpp -o your_program

希望这可以为Google访问者节省额外的搜索量。

答案 2 :(得分:1)

这是因为您正在使用for (int x: temps)这是一个c ++ 11结构。如果您使用eclipse,请尝试以下操作:

  • 右键单击项目,然后选择“属性”

  • 导航到C / C ++ Build - &gt;设置

  • 选择工具设置标签。

  • 导航到GCC C ++编译器 - &gt;其它

  • 在标有“其他标志”的选项设置中添加-std = c ++ 11

现在重建你的项目。

更新:对于Atom,请按照以下步骤操作:

转到〜/ .atom / packages / script / lib / grammers.coffee

转到C ++部分(ctrl-f c ++):

然后改变这一行:

args: (context) -> ['-c', "xcrun clang++ -fcolor-diagnostics -Wc++11-extensions // other stuff

到此:

args: (context) -> ['-c', "xcrun clang++ -fcolor-diagnostics -std=c++11 -stdlib=libc++ // other stuff

即。添加-std=c++11 -stdlib=libc++并移除-Wc++11-extensions

希望这有帮助!