Как избавиться от предупреждения: неявное преобразование сокращает 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 - предупреждения" или в разделы, подходящие для вашего компилятора, и выберите "запретить все предупреждения".

Другие вопросы по тегам