2016-06-07 3 views
1

유닉스에 cpp 파일을 작성했습니다. 중첩 템플릿 인수를 사용하는 코드 묶음이 있습니다. 예를 들어 : 난 항상 오류 `unix에서 C++ 컴파일시 중첩 템플릿 인수에 오류가 발생했습니다.

내가 그것을 어떻게 해결할 수

error: ?>?should be ? >?within a nested template argument list

`

void showAlb(map<string, vector<string>> mapArt, map<string, vector<string>> mapSong, vector<string> artists, int artnumb);` 
           ^

가지고 그러나

void showAlb(map<string, vector<string>> mapArt, map<string, vector<string>> mapSong, vector<string> artists, int artnumb); 

?

map<string, vector<string> > 
//     here^ 

C++ 11

당신이 그 공간을 생략 할 수 있습니다 :

+0

답변에서 언급했듯이 C++ 11을 사용하고 싶을 것입니다. 최근의 g ++ 버전을 가정하면 컴파일 명령 행에'-std = C++ 11 '을 추가하여 C++ 11 규칙을 사용하여 컴파일 할 수 있습니다. – md5i

답변

1

사전 C++ (11), 중첩 템플릿 인수는 두 닫는 꺾쇠 괄호 사이에 공백을했다. C++ 03을 사용하는 경우 특정 구문 규칙을 따르는 지 확인하십시오.

0

이 문제를 해결하기 위해 수행 할 수있는 두 가지 작업이 있습니다. 당신은 그대로이 지원되는 C++ (11)로 전환 할 수 있습니다 또는 오류 메시지가 당신이 할 말하고 무엇을 할 수 :

void showAlb(map<string, vector<string>> mapArt, map<string, vector<string>> mapSong, vector<string> artists, int artnumb); 

은 다음과 같아야합니다

void showAlb(map<string, vector<string> > mapArt, map<string, vector<string> > mapSong, vector<string> artists, int artnumb); 

주목하라 여분의 공백.

이 이상한 동작의 이유는 >>이 자체 운영자이기 때문입니다. C++ 파서의 첫 번째 패스 (즉, 어휘 분석)는 이것을 >이 아니라 해당 연산자로 구문 분석합니다. 즉, 컨텍스트 프리 구문 분석은 끝 꺾쇠 괄호를 검색 할 때 작동하지 않습니다.

문제가 너무 많아서 C++ 11에서이를 허용하는 명시적인 규칙이 추가되었습니다. 컴파일러는이를 이해하고 훌륭한 오류 메시지를 표시합니다.

+0

감사합니다. 정말 도움이됩니다. – RunningPig

관련 문제