Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译c+;时嵌套模板参数出错+;在unix中_C++_Unix_G++ - Fatal编程技术网

C++ 编译c+;时嵌套模板参数出错+;在unix中

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); 然而,我总

我刚刚在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(地图地图艺术、地图地图歌曲、矢量艺术家、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);