Range For循环帮助:“:”标记之前的预期初始值设定项

时间:2013-01-02 06:43:58

标签: c++ c++11

我是C ++的新手,我现在正在阅读C ++入门书。

我写了一个关于字符串的小例子,这里是代码:

#include <iostream>
#include <string>
#include <cctype>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
    string s("Hello World");

    for (auto &c : s)
        c = toupper(c);

    cout << s << endl;

    return 0;
}

我在使用GCC版本4.4.6的Linux上,我尝试使用以下代码编译此代码:

g++ test_strings.c -std=c++0x

但出现以下错误:

test_strings.c: In function 'int main()':
test_strings.c:14: error: expected initializer before ':' token
test_strings.c:19: error: expected primary-expression before 'return'
test_strings.c:19: error: expected ')' before 'return'

我从教科书中复制了程序,所以我虽然是拼写错误,但经过检查并尝试在网上搜索并更新我的gcc错误提醒。非常感谢帮助,提前谢谢。

1 个答案:

答案 0 :(得分:5)

根据the C++0x/C++11 Support in GCC page,你需要运行gcc 4.6才能获得range-for功能。

4.6 changes page包含:

  

改进了对即将推出的C ++ 0x ISO C ++标准的实验支持,包括对constexpr的支持(感谢Gabriel Dos Reis和Jason Merrill),nullptr(感谢Magnus Fromreide),noexcept,unrestricted union, range-基于循环(感谢Rodrigo Rivas Costa),不透明的枚举声明(也感谢Rodrigo),隐式删除的函数和隐式移动构造函数。

由于您运行的是gcc 4.4.6,因此无法使用。