2017-01-05 3 views
1

В C++ я пытаюсь инициализировать std :: map значений перечисления для структур.Инициализировать карту перечислений для структур

В заголовочном файле:

enum ePrompts 
{ 
    ePrompt1, 
    ePrompt2, 
    ... 
}; 

enum eDataTypes 
{ 
    eIntegers, 
    eDoubles, 
    ... 
}; 

struct SomeInfo 
{ 
    std::string text; 
    eDataTypes type; 
    float minVal; 
    float maxVal; 
}; 

std::map<ePrompts, SomeInfo> mInfoMap; 

В файле CPP:

void SomeClass::InitializeThis() 
{  
    // I would like to have an approach that allows one line per entry into the map 
    mInfoMap[ePrompt1] = (SomeInfo){"text1", eIntegers, 2, 9}; //Error: Expected an expression 

    // Also tried 
    SomeInfo mInfo = {"text1", eIntegers, 2, 9}; 
    mInfoMap[ePrompt1] = mInfo; // works 
    mInfo = {"text2", eIntegers, 1, 5}; //Error: Expected an expression 
} 

Я, вероятно, не хватает что-то очень простое, но я искал через переполнение стека совсем немного и не пришли с любыми результатами того, кто это делает. Любая помощь будет оценена!

ответ

2

Ваша первая линия имела правильную идею. Это просто необходимо небольшое изменение:

mInfoMap[ePrompt1] = SomeInfo{"text1", eIntegers, 2, 9}; 
+0

Спасибо за обратную связь! С этим изменением я теперь получаю «Некоторая информация», красная подчеркнутая, с именем типа ошибки «не разрешено». Есть идеи? – CoderJoe1991

+0

Трудно сказать. Я издевался над точным кодом, который у вас есть, и у меня нет ошибок. Я использую VS2015 – tinstaafl

+0

Я скопировал то, что я отправил в новый тестовый проект, и все еще сталкиваюсь с теми же ошибками. Я использую VS2012, работающий с .NET framework 4.5. Возможно ли, что этот синтаксис слишком новый или ...? – CoderJoe1991

0

В соответствии со стандартом C++ (5.2.3 Явного типа преобразование (функциональное обозначение))

3 Аналогично, простых типа Специфического эр или typename- спецификатор, за которым следует , бит-init-list создает временный объект специфицированного типа с прямым списком-инициализацией (8.5.4) с указанным списком с фиксированным списком, и его значением является то, что временный объект как prvalue

Так просто написать

mInfoMap[ePrompt1] = SomeInfo {"text1", eIntegers, 2, 9}; 
Смежные вопросы