Я пишу парсер, и я решил сохранить информацию о типе на std :: map. Когда я использую оператор [] для доступа к нему, я всегда получаю значение 0 для перечисления. Карта объявляется как таковой:std :: map <std :: string, enum> не сохраняет значения
enum type {Bool, Bool_a, Int_4, Inta_4, Int_8, Inta_8, Float_s, Floata_s, Float_d, Floata_d, Ch_s, Ch_a, Str, Invalid};
class kparse_ret{
...
std::map<std::string, type
...
} ret_data;
И затем устанавливается, используя нечто вроде
ret_data.type_list[itemname] = Int_4;
(Где ItemName является зЬй :: строка)
Проблема у меня в том, что, когда я использование
ret_data.type_list[data_name]
Я всегда получаю Bool или 0. (опять же, data_name является std :: string). Я знаю, что имя элемента и имя_данных имеют точно такое же содержимое, когда их соответствующие контексты будут достигнуты. Кроме того, если я снова использую itemname для доступа к нему, я получаю значение, которое я только что установил.
Небольшой программу экспонирования проблемы требуется, в противном случае она будет спекулятивными догадкам (это 'map' случайным скопировано где и обновления применяются к копии из' map'? К примеру). – hmjd
Вы сделали побайтовое сравнение между двумя строками? Они не отличаются капитализацией или встроенными/ведущими/конечными пробелами? Если вы выполняете сравнение между строкой (например, '==' operator), то они одинаковы? –
[работает для меня] (http://coliru.stacked-crooked.com/view?id=0aaa158e47df5560c6b85a7eef786478-ce6b7b81d29c30e32c78aebe6e642254) – TemplateRex