2010-06-04 3 views
3

매우 직접적인 질문입니다.반환 유형이 map <> 인 함수를 만드는 방법은 무엇입니까?

map<string, int> myMap;

myMap = initMap(&myMap);

map<string, int> initMap(map<string, int> *theMap) 
{ 
    /* do stuff... */ 

그러나, 컴파일러는 신음한다 : 나는과 같이 함수를 호출하여 초기화하고자하는지도를 가지고있다. 이것에 대한 해결책은 무엇입니까?

편집 1 :

미안 해요,하지만 난 망쳐. 코드가 올바르게 *theMap으로 작성되었지만 질문을 게시 할 때 *이 누락되었다는 사실을 알 수 없었습니다. 그래서 코멘트에 대답, 내가 오류 메시지는 다음과 같습니다

1>Roman_Numerals.cpp(21): error C2143: syntax error : missing ';' before '<'

I 함수를 정의 할 때 다시 VC++ 2010 Express와 같은 오류를 사용하여

map<char, int> initMap(map<char, int> *numerals);

에서 발생된다.

+7

컴파일러가 알리는 오류 메시지는 무엇입니까? – PeterK

답변

11

하나는 할

map<string, int> myMap; 
myMap = initMap(); 

map<string, int> initMap() 
{ 
    map<string, int> theMap; 
    /* do stuff in theMap */ 
    return theMap; 
} 

즉,이 기능을 사용하면 그것을 줄지도를 초기화하거나 보자 기능을 매핑하면 당신에게 준다. 두 가지를 모두하고 있습니다 (return 문도 없음!)

첫 번째 옵션을 선택하겠습니다.

1

맵의 복사본을 많이 만드는 대신 initMap (map & theMap)을 void 처리하지 않는 이유는 무엇입니까?

8

지도의 주소를 전달하기 때문에 불편할 지 모르지만 함수가 값을 기준으로지도를 허용합니다.

좀 더 이런 식으로 뭔가를 할 수 있습니다 :

void initMap(map<string, int>& theMap) 
{ 
    /* do stuff...*/ 
} 
+0

답변 주셔서 감사합니다.하지만 실제로 코드를 잘못 작성했습니다. 여기에는 <> * theMap이 포함되어 있습니다. 여기에서 작성한 코드에서 포인터를 방금 출력했습니다.>< – IAE

3

당신은 바람직 포인터 나지도에 대한 참조를 받아 들여야한다. 또한 편의를 위해 참조를 반환 할 수 :

map<string, int> myMap; 
initMap(myMap); 

void initMap(map<string, int>& theMap) 
{ 
    /* do stuff in theMap */ 
} 

또는 수행 :

map<string, int>& initMap(map<string, int>& theMap) 
... 
// Call initMap 
map<string, int> my_map; 
initMap(my_map); 
1

&myMap은지도 객체에 대한 포인터이고, 인수 theMap은지도 객체입니다.

두 솔루션 :

변경 myMap = initMap(myMap);-myMap = initMap(&myMap);.

또는

변경 map<string, int> initMap(map<string, int> * theMap)map<string, int> initMap(map<string, int> theMap).

3

정식 솔루션은 단지

std::map<std::string, int> initMap(); 
// ... 
std::map<std::string, int> myMap = initMap(); 

왜 리턴 값에 대한 입력 매개 변수를 사용하는 교묘 한 시도? 공연? 현대 컴파일러는 상관하지 않습니다. 사실 빈지도를 작성하는 것이 약간 더 빠를 것입니다.

-1
void initMap(map<String,int> &Map) 
{ 
    //Do something 
} 
+0

이 대답을 확장하고 설명을 추가하십시오. 왜/왜 작동합니까? –

+0

지도의 참조를 초기화 함수에 전달하고 있습니다. –

+0

반환 값은 OP가 묻는 것처럼'map '과 일치하지 않습니다. 횡설수설 한 것들을 게시하지 마십시오. –

0

약간 늦게 게임에 있지만 : 난 당신이 코드의 상단에

#include <map> 

을 놓치고 그 오류 메시지에서 추측 것입니다. 그래서 컴파일러는 그 맵이 템플릿이되어야한다는 것을 모릅니다. 따라서 뒤 따르는 꺾쇠 괄호로 혼란스러워집니다.

관련 문제