在 Unix 中编译 c++ 时嵌套模板参数出错
Error in nested template argument when compile c++ in unix
我刚刚用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增加了一个明确的规则来允许这样做。编译器理解这一点,并为您提供出色的错误消息。
相关文章:
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 使用一个参数的模板函数时出错(适用于 2)
- 为什么在函数参数前面添加 const 会出错?
- 变量用作C中的函数参数后出错
- 将私有数据成员作为默认参数传递给该类的公共方法时出错
- 使用 cvThreshold 时报告参数时出错
- STL 容器在函数中作为模板参数,在调用中出错
- 使用模板模板参数时出错
- 方法的参数列表出错
- 将 std::bind 应用于带有参数 <boost::asio::ip::tcp::socket> 时出错?
- 使用模板函数传递模板参数时出错
- 在 c++ 中调用将字符串作为参数传递的函数时出错
- 在运算符中将联合作为参数传递时出错<<
- 在C 中使用Caffe;无法将Caffe ::求解参数仪发挥作用而不会出错
- 尝试使用浮点参数运行重载函数时出错
- 尝试将 C++11 代码转换为 C++03 时默认函数模板参数出错
- Lua c++ lib sethook:钩子函数参数出错
- 在 Unix 中编译 c++ 时嵌套模板参数出错
- uniform_real_distribution c++的最小/最大参数出错