Я пытаюсь определить std::unordered_map
используя enum class
как ключ и определенный класс в качестве ссылочного объекта:станд :: unordered_map с помощью перечисления и определенного класса
std::unordered_map<Dimension, unit, EnumClassHash> SI_Dim;
SI_Dim[Dimension::MASS] = BaseSIUnits::kilogram;
Dimension
является enum class
объявлен в отдельном заголовочный файл в
enum class Dimension{MASS, TIME, LENGTH, TEMPERATURE, CURRENT, QUANTITY, ANGLE, FORCE, ENERGY, POWER,
AREA, VOLUME, NONDIMENSIONAL};
с EnumClassHash
в качестве хэш-функции (которую я могу размещать код, если это необходимо).
BaseSIUnits::kilogram
определяется несколько строк выше это как
const unit BaseSIUnits::kilogram = unit(1, "kg", Dimension::MASS);
который компилирует просто отлично. Но строка SI_Dim[Dimension::MASS] = BaseSIUnits::kilogram;
дает мне ошибку. В QtCreator (моя IDE) он говорит «ожидаемое объявление», а g ++ дает ошибку «SI_Dim не называет тип». Ни один из них не имеет для меня никакого смысла. Кроме того, при просмотре строки в QtCreator не выделяются ни Dimension::MASS
, ни BaseSIUnits::kilogram
(почти как если бы они были непризнанными, хотя я знаю, что они есть). У меня нет большого опыта работы с std :: unordered_map, так что это, вероятно, некоторая простая синтаксическая ошибка, которую я пропускаю. Но синтаксис выглядит правильно для меня на основе примеров, на которые я смотрел.
Извините, я думаю, вопрос здесь не ясен. Мой вопрос в том, есть ли очевидная синтаксическая ошибка, которая мешает компиляции кода. –
У вас есть эта строка 'SI_Dim [Dimension :: MASS] = BaseSIUnits :: kilogram;' вне функции? Вы не можете просто иметь произвольный код в области пространства имен. – Praetorian
У меня есть функция вне функции. Я хочу, чтобы контейнер unordered_map был доступен из других файлов. Как мне это сделать? –