在 Unix 中编译 c++ 时嵌套模板参数出错

Error in nested template argument when compile c++ in unix

本文关键字:参数 出错 嵌套 Unix 编译 c++      更新时间:2023-10-16

我刚刚用unix写了一个cpp文件。我有一堆使用嵌套模板参数的代码。例如:

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++11 之前,嵌套模板参数必须在两个右尖括号之间有一个空格:

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

C++11 允许您省略该空间。如果您坚持使用 C++03,只需确保遵循该特定语法规则即可。

您可以做两件事来解决此问题。您可以切换到 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增加了一个明确的规则来允许这样做。编译器理解这一点,并为您提供出色的错误消息。