#cpp
Вылезает ошибка при объявлении константы: warning C4459: объявление "speedRange" скрывает глобальное объявление В заголовочном файле находится: typedef std::pairSpeed; typedef std::map SpeedRange; extern const SpeedRange speedRange; А в CPP const SpeedRange speedRange = { { Gear::REVERSE, Speed(0, 20) }, { Gear::NEUTRAL_GEAR, Speed(MIN_SPEED, MAX_SPEED) }, { Gear::FIRST_GEAR, Speed(0, 30) }, { Gear::SECOND_GEAR, Speed(20, 50) }, { Gear::THIRD_GEAR, Speed(30, 60) }, { Gear::FOURTH_GEAR, Speed(40, 90) }, { Gear::FIFTH_GEAR, Speed(50, 150) } };
Ответы
Ответ 1
Напишите как extern const SpeedRange speedRange = { //... По умолчанию константы имеют внутреннее связывание, а потому без ключевого слова extern данное объявление считается объявлением с внутренним связыванием и скрывает одноименное объявление с внешним связыванием, присутствующее в заголовке (который вы, возможно, забыли включить. Проверьте, включен ли заголовок в этот модуль). Из стандарта C++ (3.5 Program and linkage) — a variable that is explicitly declared const or constexpr and neither explicitly declared extern nor previously declared to have external linkage; or Либо ваше определение константы находится в каком-нибудь блоке кода, а не в глобальном пространстве имен, в результате чего оно скрывает глобальное объявление.
Комментариев нет:
Отправить комментарий