Я пытаюсь использовать std::map с классом enum и std::string, но получаю ошибку. Я использую gcc 4.4.7 с -std=c++0x (это исправлено)
В файле .h:
enum class state_t{
unknown,
off,
on,
fault
};
typedef std::map<state_t,std::string> statemap_t;
В файле .cpp:
statemap_t state={
{state_t::unknown,"unknown"}
{state_t::off,"off"}
{state_t::on,"on"}
{state_t::fault,"fault"}
}
Метод разрешения перехода состояния выглядит следующим образом:
Foo::allowStateChange(const state_t localState, const state_t globalState, const state_t newState){
//Some code to verify if the state transition is allowed.
std::cout << "Device Local State:" << state.find(localState)->second << "Device Global State:" << state.find(globalState)->second << "Device New State:" << state.find(newState)->second << std::endl;
}
При компиляции я получаю следующую ошибку: ошибка: недопустимые операнды типов «state_t» и «state_t» для двоичного «оператора‹»
Если я изменю enum class state_t
на enum state_t
, это сработает. Есть ли способ найти на карте класс перечисления?
Заранее спасибо.
<<
как<
? - person Kerrek SB   schedule 24.02.2017cout
? Работает ли вообще простое определение карты? - person Kerrek SB   schedule 24.02.2017enum class
являетсяint
(если явно не указано что-то еще), поэтому, вероятно, должно быть что-то еще. - person Yuriy Ivaskevych   schedule 24.02.2017GNU GCC 5.4.0 with -std=c++11
работает нормально. - person ashiquzzaman33   schedule 24.02.2017enum
вместоenum class
, поскольку ваш компилятор (версия и использование) не поддерживает эту языковую функцию. - person Caleth   schedule 24.02.2017