在unix

时间:2016-06-07 13:27:47

标签: c++ unix g++

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

我该如何解决?

2 个答案:

答案 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添加了一个明确的规则来允许这个。编译器理解这一点,并为您提供了出色的错误消息。