3

我对 C++ 完全陌生,现在我正在关注 C++ Primer 书。

我写了一个关于字符串的小例子,代码如下:

#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 后,错误提醒。帮助将不胜感激,在此先感谢。

4

1 回答 1

5

根据GCC 页面中的 C++0x/C++11 支持,您需要运行 gcc 4.6 才能获得 range-for 功能。

4.6 更改页面包含:

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

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

于 2013-01-02T06:51:44.643 回答