Как избавиться от предупреждения: неявное преобразование сокращает 64-разрядное значение до 32-разрядного

Прежде всего, я новичок в C ++, и я использую Xcode 4.6.2. Конфигурация компилятора по умолчанию. Я только переключил компилятор на GCC 4.2.
Если я скомпилирую свой маленький код, я получу следующие предупреждения:

Неявное преобразование сокращает 64-битное значение до 32-битного
Неявное преобразование теряет целочисленную точность: «unsigned long» в «unsigned int»

и это код, который вызывает предупреждения:

median = temps[temps.size()/2];

Подсказка: Temps является вектором двойного, а медиана является двойным

Что мне нужно сделать, чтобы избавиться от этих предупреждений? Можно ли справиться с этим с помощью конфигурации компилятора (я не имею в виду отключение предупреждений ;-)) или мне нужно изменить свой код?

1

Решение

temps.size() возвращает (из того, что я могу прочитать) без знака долго, пока 2 является (без знака) int.

пытаться

temps[(unsigned long)temps.size()/(unsigned long)2]

или же

temps[(unsigned long)((unsigned long)temps.size()/(unsigned long)2)]
1

Другие решения

В настройках проекта перейдите в раздел «LLVM GCC 4.2 — предупреждения» или в разделы, соответствующие вашему компилятору, и выберите «запретить все предупреждения».

0

Нет, я столкнулся с той же проблемой в X-CODE с вышеупомянутым компилятором «Apple LLVM Compiler 4.2», и она была решена с использованием «unsigned long int» вместо «int» типа данных …

0
По вопросам рекламы ammmcru@yandex.ru