我刚在unix中写了一个cpp文件。 我有一堆使用嵌套模板参数的代码。 例如:
void showAlb(map<string, vector<string>> mapArt, map<string, vector<string>> mapSong, vector<string> artists, int artnumb);
然而我总是有错误 `
错误:?&gt;?应该是? &gt;?嵌套模板参数列表
`
void showAlb(map<string, vector<string>> mapArt, map<string, vector<string>> mapSong, vector<string> artists, int artnumb);`
^
我该如何解决?
答案 0 :(得分:2)
Pre-C ++ 11,嵌套模板参数必须在两个结束尖括号之间留有空格:
map<string, vector<string> >
// here^
C ++ 11允许您省略该空间。如果您坚持使用C ++ 03,请确保遵循该特定语法规则。
答案 1 :(得分: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添加了一个明确的规则来允许这个。编译器理解这一点,并为您提供了出色的错误消息。