Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 
Вернуться
Тема: Здравствуйте. Столкнулся с такой проблемой - система не хочет компилировать любой исходник, где встречается функция abs().
1
  1  Вадим Дмитриевич, 10 октября 2015 г. 7:42:15
      Извиняюсь, вторую ссылку перепутал(с вариантом успешной компиляции). Там должно быть:
http://ideone.com/P2CNle
  2  Вадим Дмитриевич, 10 октября 2015 г. 7:40:10
      Я проверил несколько компиляторов gcc. Те, у которых версия ниже 4.9.2, ругаются на код, 4.9.2(С++ 14) - спокойно компилируют. На том же IdeOne можно выбрать С++ 5.1 и С++ 14. Совершенно одинаковый код, результаты:
C++ 5.1 http://ideone.com/t5ctqh - ругается
C++ 14 http://ideone.com/jxzIjP - компиляция успешна, код работает
Code::Blocks с компилятором версии 4.7.1 также не компилирует.
Не знаю, с чем это связано, но в С++ 14 и для компиляторов 4.9.2 такой код можно написать, а для более ранних версий - это ошибка.
Также, в 4.9.2 для использования abs() достаточно подключения <iostream>'a. В старых версиях без <cmath> или <cstdlib>, std::abs() не работает.
Мне кажется, 4.9.2 здесь в системе не совсем и 4.9.2 :) Может быть, инклюды остались от старых версий.

По поводу <cstdlib> верно, спасибо. Но, как я и говорил выше, в новых компиляторах достаточно даже одного <iostream>.
  3  Денис Розимовский, 09 октября 2015 г. 22:04:10
      Если подключать <cstdlib>, то можно использовать эту функцию без std. http://ideone.com/Qw0wUH
Возможно дело в разных компиляторах.
  4  Вадим Дмитриевич, 09 октября 2015 г. 2:57:00
      Я нашёл, где можно посмотреть сообщения компилятора системы на сайте и догадался, в чём дело - нужно использовать "std::abs()", если не прописано using namespace std; Извините, я просто только начал изучать C++. Но тогда вопрос в другом - почему мой компилятор не считает это за ошибку? Хотя, если написать "cout" вместо "std::cout" - он выбивает точно такую же ошибку, что и ваш.
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2026, ИНН 246305493507, E-mail: admin@acmp.ru