Как избавиться от предупреждения: неявное преобразование сокращает 64-разрядное значение до 32-разрядного
Прежде всего, я новичок в C++, и я использую Xcode 4.6.2. Конфигурация компилятора по умолчанию. Я только переключил компилятор на GCC 4.2. Если я скомпилирую свой маленький код, я получу следующие предупреждения:
Неявное преобразование сокращает 64-разрядное значение до 32-разрядного значения. Неявное преобразование теряет целочисленную точность: "unsigned long" до "unsigned int"
и это код, который вызывает предупреждения:
median = temps[temps.size()/2];
Подсказка: temps - это вектор double, а медиана - это double
Что мне нужно сделать, чтобы избавиться от этих предупреждений? Можно ли справиться с этим с помощью конфигурации компилятора (я не имею в виду отключение предупреждений;-)) или мне нужно изменить свой код?
3 ответа
temps.size()
возвращает (из того, что я могу прочитать) без знака долго, пока 2
является (без знака)int.
пытаться
temps[(unsigned long)temps.size()/(unsigned long)2]
или же
temps[(unsigned long)((unsigned long)temps.size()/(unsigned long)2)]
Нет, я столкнулся с той же проблемой в X-CODE с вышеупомянутым компилятором "Apple LLVM Compiler 4.2", и она была решена с помощью "unsigned long int" вместо "int" типа данных...
В настройках проекта перейдите в раздел "LLVM GCC 4.2 - предупреждения" или в разделы, подходящие для вашего компилятора, и выберите "запретить все предупреждения".