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

Dieser C++ Code nicht kompiliert. Fehler msg: main.cpp: 21: Fehler: eine Funktionsdefinition ist hier nicht erlaubt vor ':' Token Frage: Gibt es eine für jede Schleife in C++ (Bereich für Schleife?)? Was ist falsch mit dem für jede Schleife oben?Wie für jede Schleife in C++ verwenden

Vielen Dank im Voraus.

+5

Es existiert in C++ 11. Stellen Sie sicher, dass Sie einen Compiler verwenden, der C++ 11 verarbeiten kann, und stellen Sie sicher, dass Sie die erforderlichen Optionen dafür aktivieren. – jogojapan

+0

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

Antwort

16

Der Code gültig ist, verwenden könnte wie auf einem online compiler demonstriert werden.

Bitte beachten Sie die Dokumentation Ihres Compilers, um sicherzustellen, dass Sie C++ 11 aktiviert haben. Die Option wird oft -std=c++11 genannt. Möglicherweise müssen Sie ein Upgrade herunterladen. Überprüfen Sie Ihren Paketmanager auf GCC (derzeit 4.8) oder Clang (derzeit 3.3).

4

Vor C++ 11x, for_each ist in der algorithm Header definiert. einfach verwenden:

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

wo fn eine Funktion ist, die das Element durchgelassen wird, und die ersten beiden Argumente eingegeben Iteratoren.

Auch nach sowohl string einschließlich und algorithm Sie nur

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

+4

'std :: for_each' ist immer noch im Header' algorithm' definiert, auch in C++ 11. (Die von C++ 11 in den Sprachenkern eingeführte bereichsbasierte for-Schleife hat den 'std :: for_each'-Algorithmus nicht ersetzt, obwohl es in den Anwendungsfällen eine gewisse Überlappung gibt.) – jogojapan