c++ - C++ 中的编译问题 (CodeBlocks 13.12)

标签 c++ gcc c++11 for-loop

<分区>

我是 C++ 的新手。我从“使用 C++ 编程原则和实践”一书开始。到目前为止一切都很好,但我在编译某些命令时遇到了问题。我写了一个简单的代码如下:

int main()
{
    vector<double> temps;
    for (double temp; cin >> temp;) {
        temps.push_back(temp);
    }
    double sum = 0;

    for (int x:temps) sum += x;
    cout << "\nAverage temperature is: " << sum / temps.size() << endl;

    sort(temps);
    cout << "Median temperature is: " << temps[temps.size()/2] << endl;

}

不幸的是,我收到有关 for 循环的编译错误:错误:C++98 模式下不允许基于范围的“for”循环

我已经下载了带有新 GCC 编译器的最新版本的 CodeBlocks,但仍然出现同样的错误。我也在 CodeBlocks 中尝试过其他编译器,但它们没有解决问题。

我对“constexpre”命令也有同样的经历,但我无法解决它。顺便说一句,本书的示例和练习有时需要一个“.h”文件,我把它放在这个文件所在的文件夹中。有什么建议吗?

最佳答案

问题是:

for (int x:temps) sum += x;

正如编译器告诉您的那样,它是一个基于范围的 for 循环,并且随 c++11 一起提供。如果您想保留循环,则需要使用 GCC 编译器选项 -c++0x-c++11 进行编译,具体取决于您的实际编译器版本。

解决方法是使用标准的 for 循环:

for ( std::vector<int>::iterator it = temps.begin() ; it != temps.end(); ++it) sum+=*it;

关于c++ - C++ 中的编译问题 (CodeBlocks 13.12),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25020332/

相关文章:

c++ - streampos 和 pos_type、streamoff 和 off_type 有什么区别?

c++ - 如何使用 VC++ 将此脚本合并到构建过程中

c - 使用 gcc,我无法获得第 3 方库 Cairo 来链接/编译

c++ - 如何为 cpp 和 h 文件创建别名(并忽略编译器 __attributes__)

c++ - 模板特征类中枚举和静态常量成员变量的使用

c++11 - 我们可以使用参数包作为 std::vector 初始值设定项吗?

c++ - 没有静态的类声明

c++ - 开发嵌入式软件库,C 还是 C++?

c - C 中的 Vector 和 < > 是什么?

c++ - 变体类型和可变参数模板的转换和输出运算符