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

가 의견을 보내 주셔서 감사합니다 쓰기! 이 변경 사항으로 이제 'SomeInfo'에 'type name is not allowed'오류가있는 빨간색 밑줄이 표시됩니다. 어떤 아이디어? – CoderJoe1991

+0

말하기 어렵습니다. 내가 가진 정확한 코드를 조롱했는데 오류가 없습니다. VS2015를 사용하고 있습니다. – tinstaafl

+0

새 테스트 프로젝트에 게시 한 내용을 복사했지만 여전히 동일한 오류가 발생합니다. NET Framework 4.5를 실행하는 VS2012를 사용하고 있습니다. 이 구문이 너무 새롭거나 ... 가능합니까? – CoderJoe1991

0

는 C++ 표준에 따라 (5.2.3 명시 적 형식 변환 (함수 표기)) 마찬가지로

(3), 단순 유형 특정한 어 또는 typename- : 그것은 단지 약간의 변화를 필요 그 다음에 이 오는 braced-init-list는 지정한 유형의 임시 객체 을 지정 된 braced-init-list 인 으로 직접 목록 초기화하며 (8.5.4) 해당 값은 임시 값을 prvalue로 사용합니다

그러니 그냥

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