C++ 编译c+;时嵌套模板参数出错+;在unix中
我刚刚在unix中编写了一个cpp文件。 我有很多使用嵌套模板参数的代码。 例如:C++ 编译c+;时嵌套模板参数出错+;在unix中,c++,unix,g++,C++,Unix,G++,我刚刚在unix中编写了一个cpp文件。 我有很多使用嵌套模板参数的代码。 例如: void showAlb(map<string, vector<string>> mapArt, map<string, vector<string>> mapSong, vector<string> artists, int artnumb); void showAlb(地图地图艺术、地图地图歌曲、矢量艺术家、int-artnumb); 然而,我总
void showAlb(map<string, vector<string>> mapArt, map<string, vector<string>> mapSong, vector<string> artists, int artnumb);
void showAlb(地图地图艺术、地图地图歌曲、矢量艺术家、int-artnumb);
然而,我总是犯错误
`
错误:?>?应该是?>?在嵌套模板参数列表中
`
void showAlb(地图地图艺术、地图地图歌曲、矢量艺术家、int-artnumb)`
^
如何修复它?在C++11之前,嵌套模板参数必须在两个右尖括号之间留有空格:
map<string, vector<string> >
// here^
map
//这里^
C++11允许您省略该空格。如果您一直使用C++03,请确保遵循特定的语法规则。有两件事可以解决此问题。您可以切换到C++11,在C++11中,这是受支持的,或者您可以执行错误消息告诉您要执行的操作:
void showAlb(map<string, vector<string>> mapArt, map<string, vector<string>> mapSong, vector<string> artists, int artnumb);
void showAlb(地图地图艺术、地图地图歌曲、矢量艺术家、int-artnumb);
应该是:
void showAlb(map<string, vector<string> > mapArt, map<string, vector<string> > mapSong, vector<string> artists, int artnumb);
void showAlb(地图地图艺术、地图地图歌曲、矢量艺术家、int-artnumb);
注意额外的空格
这种奇怪行为的原因是>
本身就是一个操作符。C++分析器第一遍(即词法分析)将此作为该运算符进行解析,而不是两个<代码> > /COD>。这意味着,在搜索终止的角括号时,上下文无关的解析不需要处理任何内容
这个问题非常常见,以至于C++11添加了一个显式规则来允许这个问题。编译器理解这一点,并为您提供了一条极好的错误消息 正如答案中提到的,您可能希望使用C++11。假设g++版本足够新,您可以通过在编译命令行中添加
-std=C++11
来使用C++11规则进行编译。谢谢,这真的很有帮助。
void showAlb(map<string, vector<string> > mapArt, map<string, vector<string> > mapSong, vector<string> artists, int artnumb);