2013-06-24 13 views
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; 
} 

Ten kod C++ nie jest kompilowany. Błąd msg: main.cpp: 21: błąd: definicja funkcji nie jest tu dozwolona przed ":" tokenem Pytanie: Czy istnieje jedna pętla w C++ (zakres dla pętli?)? co jest nie tak z powyższą pętlą?Sposób użycia dla każdej pętli w C++

Z góry dziękuję.

+5

Istnieje w C++ 11. Upewnij się, że korzystasz z kompilatora obsługującego C++ 11 i upewnij się, że włączono wymagane opcje. – jogojapan

+0

http://stackoverflow.com/q/15027282/62576 –

Odpowiedz

16

Kod jest ważny, jak można wykazać na online compiler.

Proszę sprawdzić dokumentację kompilatora, aby upewnić się, że włączyłeś C++ 11. Ta opcja jest często nazywana -std=c++11. Może być konieczne pobranie aktualizacji; sprawdź swojego menedżera pakietów dla GCC (obecnie 4.8) lub Clanga (obecnie 3.3).

4

Przed C++ 11x, for_each jest zdefiniowany w nagłówku algorithm. Wystarczy użyć:

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

gdzie fn to funkcja, która zostanie przekazana element, a pierwsze dwa argumenty wejściowe iteratory.

Ponadto, po tym zarówno string i algorithm można po prostu użyć

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

+4

'std :: for_each' jest nadal zdefiniowany w nagłówku' algorithm', nawet w C++ 11. (Oparta na zasięgach pętla for wprowadzona przez C++ 11 do jądra językowego nie zastąpiła algorytmu 'std :: for_each', nawet jeśli w przypadku użycia występuje pewne pokrywanie się.) – jogojapan

Powiązane problemy