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

Этот код C++ не скомпилирован. Ошибка сообщения: main.cpp: 21: error: определение функции здесь недопустимо перед ':' token Вопрос: Есть ли для каждого цикла в C++ (диапазон для цикла?)? Что не так с каждым циклом выше?Как использовать для каждого цикла в C++

Заранее спасибо.

+5

Он существует в C++ 11. Убедитесь, что вы используете компилятор, который может обрабатывать C++ 11, и убедитесь, что вы включили необходимые параметры для этого. – jogojapan

+0

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

ответ

16

Код действителен, так как может быть продемонстрировано на online compiler.

Пожалуйста, обратитесь к документации вашего компилятора, чтобы убедиться, что вы включили C++ 11. Опцию часто называют -std=c++11. Возможно, вам придется загрузить обновление; проверьте свой менеджер пакетов для GCC (в настоящее время на 4.8) или Clang (в настоящее время 3,3).

4

До C++ 11x, for_each определен в заголовке algorithm. Просто используйте:

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

, где fn является функцией, в которой элемент будет принят, а первые два аргумента являются входными итераторы.

Кроме того, после того, как в том числе и stringalgorithm вы могли бы просто использовать

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

+4

'std :: for_each' по-прежнему определяется в заголовке' algorithm', даже в C++ 11. (Цикл for-loop, введенный C++ 11 в ядро ​​языка, не заменил алгоритм 'std :: for_each', хотя в случаях использования существует некоторое совпадение.) – jogojapan

Смежные вопросы