2016-06-07 126 views
1

我剛剛在unix中寫了一個cpp文件。 我有一堆使用嵌套模板參數的代碼。 例如:在unix中編譯C++時嵌套模板參數出錯

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

不過,我總是得到錯誤 `

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);` 
           ^

我怎樣才能解決呢?

+0

正如答案中所提到的,您可能會喜歡使用C++ 11。假設最近有足夠的g ++版本,可以通過在編譯命令行中添加-std = C++ 11來編譯使用C++ 11規則。 – md5i

回答

1

預C++ 11,嵌套模板參數必須有兩個閉合尖括號之間的空間:

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

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