2014-12-13 18 views
0

생성자의 초기화 목록에 std :: map m_mapName을 추가하고 싶습니다.ctor의 초기화 목록에 std :: map을 추가하십시오.

생성자의 init 목록에 m_mapName()을 입력하면 컴파일러에서이를 허용합니다.

하지만 맞습니까? 올바르지 않은 경우 초기화 목록에 어떻게 맵을 추가 할 수 있습니까?

그런 다음지도에 몇 가지 삽입을 수행합니다. 값을 삽입하는 더 우아한 방법은 무엇입니까? 그래서 매번 insert 함수를 호출하지 않습니까?


상세 정보 :

그냥처럼 : C++, can I statically initialize a std::map at compile time?, 컴파일러는 같은 구문을 허용하지 않습니다

std::map<int, char> example = { (1,'a'), 
          (2, 'b'), 
          (3, 'c') }; 

부스트를 사용할 수 없습니다. 내 코드는 다음과 같습니다

* className.h : *

typedef std::map <uint16_t, int> mapType; 

typedef std::pair <uint16_t, int> mapPair; 

className{ 

private: 

    mapType m_mapName; 

} 

* className.cpp : *

className::className() : 

m_mapName() 

{ 

... 

m_mapName.insert(mapPair(someMapValue1, 0)); 

m_mapName.insert(mapPair(someMapValue2, 0)); 

m_mapName.insert(mapPair(someMapValue3, 0)); 
+0

정확하게 연결된 방법에 대한 답변을 읽었습니까? –

+0

예, 했어요. 게시는 내 특정 질문에 대답하지 않습니다 : 왜 컴파일러가 내가 init리스트에 맵을 추가 한 방법을 받아들였습니까? – Developer

+0

부스트도 사용할 수 없습니다. – Developer

답변

0

예, 코드가 맞습니다. 연결된 질문을 통해 초기화 할 항목이 표시됩니다.

className::className() 
:m_mapName{ 
    {someMapValue1, 0}, 
    {someMapValue2, 0}, 
    {someMapValue3, 0}} 
{} 
+0

위의 접근 방식은 나를 준다 : 'std :: map '에 대한 호출과 일치하는 함수 없음, std :: () ' – Developer

+0

형식을'uint16_t '에서'int '로 변경했습니다. 코드는 다음과 같습니다. className :: className() : m_mapName { {0, 0}} {} 불행히도 'm_mapName'_ 및 _expected 생성자, 소멸자 또는 형식 변환 전에 { 'token_ – Developer

+0

어떻게 든 m_mapName()이 일부 기본 생성자를 호출하기 때문에 내 코드가 작동하는 것처럼 보입니다. 하지만 확실하지 않습니다. – Developer