现在的位置: 首页 > 综合 > 正文

编译错误模板参数太多的几种情况

2018年03月30日 ⁄ 综合 ⁄ 共 995字 ⁄ 字号 评论关闭

编译器报错:模板参数太多的错误

1 C++ 不允许同名而参数个数不同的 templates 存在

template<typename ResultType>
class Functor
{
....
};
template < typename ResultType, typename Parm1 >
class Functor
{
....
};
// 编译错误,解决方法:只留一下一个模板定义

2 特例1:模板的偏特化与模板原型声明的模板参数个数不同

// 模板原型
template<typename ResultType>
class Functor
{

};
// 模板的偏特化,增加了参数 Parm1
template < typename ResultType, typename Parm1 >
class Functor <ResultType, int>
{

};
// 编译错误,解决方法:修改模板原型
template<typename ResultType, typename Parm1>
class Functor
{

};

3 特例2:模板完全特化与模板原型声明的模板参数个数不同

template<typename ResultType>
class Functor
{

};
template <>
class Functor <int, int>
{

};
// 解决方法同上

4 一种额外的情况:无模板的原型声明的模板编译错误

// 情况1:
template <typename ResultType>
class Functor < ResultType, int >
{

};
// 情况2:
template <>
class Functor < int, int>
{

};
// 情况1、2 都会产生下面的编译错误
// error C2059: 语法错误:“<”	
// error C2143: 语法错误 : 缺少“;”(在“{”的前面)	
// error C2143: 语法错误 : 缺少“;”(在“<”的前面)	
// error C2447: “{”: 缺少函数标题(是否是老式的形式表?)	
// error C2913: 显式专用化;“Functor”不是类模板的专用化	
// IntelliSense:  Functor 不是模板	

// 原因:没有声明模板原型
// 解决方法:
template <typename ResultType, typename Parm1>
class Functor
{
};
// 或者:
template <typename ResultType, typename Parm1> class Functor;

【上篇】
【下篇】

抱歉!评论已关闭.