14
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main() {
    string str("hello world!");
    for (auto &c : str)
        c = toupper(c);
    cout << str;
    return 0;
}

この C++ コードはコンパイルされません。Error msg: main.cpp:21: error: a function-definition is not allowed here before ':' token 質問: C++ に for each ループはありますか (範囲 for ループ?)? 上記の for each ループの何が問題なのですか?

前もって感謝します。

4

2 に答える 2

16

オンラインコンパイラで実証できるように、コードは有効です。

コンパイラのドキュメントを参照して、C++11 が有効になっていることを確認してください。このオプションは、しばしば と呼ばれ-std=c++11ます。アップグレードをダウンロードする必要がある場合があります。GCC (現在 4.8) または Clang (現在 3.3) のパッケージ マネージャーを確認してください。

于 2013-06-24T02:31:10.903 に答える
4

C++11x より前では、ヘッダーfor_eachで定義されています。algorithm単純に使用します:

for_each (vec.begin(), vec.end(), fn);

wherefnは要素が渡される関数で、最初の 2 つの引数は入力反復子です。

また、両方を含めた後は、stringそのままalgorithm使用できます

std::transform(str.begin(), str.end(),str.begin(), ::toupper);

于 2013-06-24T02:30:56.600 に答える