Почему я получаю предупреждение для этого цикла для цикла в C++?

Вопрос: В настоящее время я самоучитель себя C++, используя книгу Бьярна Страуструпа (2-е изд.). В одном из примеров он использует диапазон для цикла для чтения элементов в векторе. Когда я написал и скомпилировал код для себя, я получаю это предупреждение. Когда я запускаю код, он работает и вычисляет среднее значение. Почему я получаю это предупреждение,

Вопрос:

В настоящее время я самоучитель себя C++, используя книгу Бьярна Страуструпа (2-е изд.). В одном из примеров он использует диапазон для цикла для чтения элементов в векторе. Когда я написал и скомпилировал код для себя, я получаю это предупреждение. Когда я запускаю код, он работает и вычисляет среднее значение. Почему я получаю это предупреждение, и я должен его игнорировать? Кроме того, почему диапазон – для использования int вместо double в примере, но все же возвращает double?

temp_vector.cpp:17:13: warning: range-based for loop is a C++11 extension [-Wc++11-extensions]

Это код

#include<iostream> #include<vector> using namespace std; int main () { vector<double> temps; //initialize a vector of type double /*this for loop initializes a double type vairable and will read all doubles until a non-numerical input is detected (cin>>temp)==false */ for(double temp; cin >> temp;) temps.push_back(temp); //compute sum of all objects in vector temps double sum = 0; //range-for-loop: for all ints in vector temps. for(int x : temps) sum += x; //compute and print the mean of the elements in the vector cout << «Mean temperature: » << sum / temps.size() << endl; return 0; }

Аналогичным образом: как я должен рассматривать диапазон значений в терминах стандарта для цикла?

Ответ №1

Передайте -std=C++11 компилятору; ваш (древний) компилятор по умолчанию C++ 03 и предупреждает вас, что он принимает некоторые новые C++ конструкции в качестве расширений.

База Ranged для расширена в цикл, основанный на итераторе, но с меньшими возможностями для опечаток.

Ответ №2

Это потому, что вы используете for (int x: temps) который является конструкцией C++ 11. Попробуйте следующее, если вы используете eclipse:

  • Щелкните правой кнопкой мыши по проекту и выберите “Свойства”

  • Перейдите к C/C++ Build → Настройки

  • Перейдите на вкладку “Параметры инструмента”.

  • Перейдите к компилятору GCC C++ → Разное

  • В настройке параметра, обозначенной “Другие флаги”, добавьте -std = C++ 11

Теперь перестройте свой проект.

Обновление: для Atom выполните следующие шаги:

Перейдите к ~/.atom/packages/script/lib/grammers.coffee

Перейдите в раздел C++ (ctrl-f C++):

Затем измените эту строку:

args: (context) -> [‘-c’, «xcrun clang++ -fcolor-diagnostics -Wc++11-extensions // other stuff

к этому:

args: (context) -> [‘-c’, «xcrun clang++ -fcolor-diagnostics -std=c++11 -stdlib=libc++ // other stuff

т.е. добавить -std=C++11 -stdlib=libC++ и удалить -WC++11-extensions

Надеюсь это поможет!

Ответ №3

Поскольку никто не показывает, как использовать C++ 11 с g++, это выглядит так…

g++ -std=c++11 your_file.cpp -o your_program

Надеюсь, это сэкономит посетителям Google дополнительный поиск.

Оцените статью
Добавить комментарий