C++中的模板仅在长数据类型上出错
Template in C++ Error only on long Datatype
我是C++的新手,有人能帮我解决这个错误吗?
#include <iostream>
using namespace std;
template<typename T1>
int findElement(T1 field[],T1 element,long int indx);
template<typename T2>
double getAverage(T2 field[],long int indx);
int main()
{
int arr1[] = {1,1,2,1,1,2,1,2,3};
long int arr2[] = {19133,15133,13213};
double arr3[] = {1,1,1,2.9,0,0,0,0};
findElement(arr1,2,sizeof(arr1)/sizeof(int));
cout << "Average =" << getAverage(arr1,sizeof(arr1)/sizeof(int)) << endl;
findElement(arr2,15133,sizeof(arr2)/sizeof(long int)); //<=== Error
cout << "Average =" << getAverage(arr2,sizeof(arr2)/sizeof(long int)) << endl;
findElement(arr3,2.9,sizeof(arr3)/sizeof(double));
cout << "Average =" << getAverage(arr3,sizeof(arr3)/sizeof(double)) << endl;
return 0;
}
template<typename T1>
int findElement(T1 field[],T1 element,long int indx)
{
int pos = -1;
cout << " searching for " << element << " ...";
for(int i=0;i<indx;i++)
{
if(element==field[i])
{
pos = i;
}
}
if(pos>0) cout << " found! Position is : " << pos << endl;
else cout << " no found!" << endl;
return pos;
}
template<typename T2>
double getAverage(T2 field[],long int indx)
{
int sum = 0;
for(int i=0;i<indx;i++)
sum += field[i];
return static_cast<double>(sum)/static_cast<double>(indx);
}
|19 |错误:no>用于调用"findElement(long-int[3],int,long>>unsigned int)"的匹配函数|注意:候选者:>template-int-findElement(T1*,T1,long-int)|注意:模板参数推导/替换失败:|/home/robin/Dokumente/CPP/Labor2/Aufg2/aufg2b/main.CPP|19|注意:推断出参数"T1"("long-int"answers"int")的冲突类型|||===生成失败:1个错误,0个警告(0分钟,0秒)===|
问题是
template<typename T1>
int findElement(T1 field[],T1 element,long int indx);
要求field
和element
具有相同的类型。当你呼叫时
findElement(arr2,15133,sizeof(arr2)/sizeof(long int));
arr2
是long
,但15133
是类型为int
的整数字面值。由于CCD_ 7和CCD_。请注意,编译器在模板参数推导过程中没有进行转换。如果在该步骤中类型不匹配,则不会使用该模板。
您可以通过将15133
设置为类似的long
整数文字来修复它
findElement(arr2,15133L,sizeof(arr2)/sizeof(long int));
^ L for long
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在C++中打印指向不同基元数据类型的指针的内存地址
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何计算数据类型的范围,例如int
- C++中数据类型修饰符的顺序
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 特定数据类型的模板类
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 有没有办法提示用户使用哪种数据类型作为模板 c++
- 为什么双精度数据类型在C++中出错?
- 将运算符<<与隐式转换的非基本数据类型一起使用时出错
- 为什么当我们把变量"u"的数据类型从长整型更改为整型时,模幂会出错?
- 使用矢量<数据类型>进行 arm 编译时出错
- C++中的模板仅在长数据类型上出错
- 数据类型匹配,但我的链表仍然出错
- 使用'int'数据类型时出错,即使数字不是小数
- 使用BSTR数据类型时出错
- 使用c++从xml文件返回char*以外的数据类型时出错
- 在数组中插入数据时出错 - 数组下标'int[int]'的类型无效