Страницы

Поиск по вопросам

воскресенье, 8 марта 2020 г.

Объявление констант через extern

#cpp


Вылезает ошибка при объявлении константы:


  warning C4459: объявление "speedRange" скрывает глобальное объявление


В заголовочном файле находится:

typedef std::pair Speed;
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 Либо ваше определение константы находится в каком-нибудь блоке кода, а не в глобальном пространстве имен, в результате чего оно скрывает глобальное объявление.

Комментариев нет:

Отправить комментарий