По различным причинам реализации я определил следующее перечисление:
typedef enum HBSnakeMovementDirection
{
HBSnakeMovementDirectionUp = 1,
HBSnakeMovementDirectionDown = -1,
HBSnakeMovementDirectionRight = 2,
HBSnakeMovementDirectionLeft = -2
}
HBSnakeMovementDirection;
Однако, если я попытаюсь использовать HBSnakeMovementDirectionRight
, я получу следующее предупреждение:
Неявное преобразование изменяет подпись: 'int' на 'HBSnakeMovementDirection'
У него нет проблем ни с одним из других значений перечисления. В чем проблема? Я думал, что это может быть связано со смешиванием отрицательных и положительных значений перечисления, но я не могу найти ничего окончательного по этому поводу.
(Я смог придумать все положительные значения перечисления, которые позволяют мне обойти эту проблему , но это все еще озадачило меня, поэтому я решил спросить об этом.)
Я должен заявить, что, как и во всех моих проектах, я включаю почти все предупреждения - следовательно, Жалобы -Wconversion
- и рассматривать их как ошибки. (Я предпочитаю быть максимально строгим во время компиляции.) Я использую LLVM 1.6.
ОБНОВЛЕНИЕ 1 : Буквально любое использование HBSnakeMovementDirectionRight
приводит к предыдущему предупреждению:
HBSnakeMovementDirection movementDirectionRight = HBSnakeMovementDirectionRight;
Мне нужно преобразовать HBSnakeMovementDirectionRight
в HBSnakeMovementDirection
, чтобы отключить предупреждение.
ОБНОВЛЕНИЕ 2 : По запросу, вот вся команда сборки, которая запускается на моем компьютере:
ОБНОВЛЕНИЕ 3 : Вот точный проект, над которым я работаю, размещенный на GitHub:
https://github.com/LucasTizma/Hebi
А именно следующее дерево:
https: // github. com / LucasTizma / Hebi / tree / 89262e2e53881584daf029e3dd5f1e99dfbd6f96