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

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

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;

当你调用函数时,如果传递给函数的参数数量或类型不符合函数定义的要求,通常会导致编译错误。这种情况通常发生在以下几种情形: 1. **不足够的参数**:如果你定义了一个需要多个参数的函数,但只提供了部分参数编译器会在尝试解析函数调用时发现缺少必要参数,从而报错。 ```cpp void requireTwoParams(int a, int b) { // 函数体 } int main() { requireTwoParams(1); // 编译错误:预期两个参数,但只有1个 } ``` 2. **多余的参数**:即使参数数量正确,但如果函数期望的是特定类型的参数列表,而你传递了不同类型或过多的数据,也可能导致编译错误。 ```cpp void printName(string name) { // 函数体 } int main() { printName(123); // 编译错误:无法将整数转换为字符串 } ``` 3. **指针和引用**:对于使用指针或引用来传递参数情况,如果不提供有效的指针或引用(如NULL指针或未初始化的引用),也会触发错误。 ```cpp void printAddress(void* ptr) { // 函数体 } int main() { void* invalidPtr; // 没有初始化 printAddress(invalidPtr); // 如果invalidPtr为NULL,可能会引发运行时错误 } ``` 4. **模板函数或重载函数**:如果使用模板函数或重载函数,参数不符时同样会产生编译错误。 ```cpp template<typename T> void print(T value) { ... } print("Hello"); // 如果期望传入整型,这将是错误的 ``` 在这些情况下,你需要确保提供的参数满足函数签名的要求,否则程序无法正常编译或运行。如果你遇到具体的编译错误信息,那将明确指出问题所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值