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;
}

LinuxでGCCバージョン4.4.6を使用していて、次のコードを使用してこのコードをコンパイルしようとしました。

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'

教科書からプログラムをコピーしたので、つづりが間違っていたのですが、チェックしてWebで検索し、gccを更新しようとすると、エラーが表示されます。よろしくお願いします。

4

1 に答える 1

5

GCC ページでの C++0x/C++11 のサポートに従って、range-for 機能を取得するには gcc 4.6 を実行する必要があります。

4.6の変更ページには以下が含まれます。

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 に答える