我一直收到错误“没有重载函数的实例”printArray“匹配参数列表。有人请告诉我原因吗?我正在尝试重载模板函数,以便它显示数组的元素开始和结束于指定的职位。
我有我的初始模板和功能:
template< typename T >
void printArray( const T *array, int count )
我试图超载的功能。
template< typename T >
void printArray(int lowSubscript, int highSubscript)
和我的电话:
// display elements 1-3 of array a
cout << "Array a from positions 1 to 3 is:\n";
elements = printArray(1,3);
我对第一个printArray的调用显示没有错误:
// display array a using original printArray function
cout << "\nUsing original printArray function\n";
printArray( a, ACOUNT );
答案 0 :(得分:6)
printArray
的第二次重载是模板,但签名不依赖于模板参数T
。因此,您必须在通话时指定它,例如printArray<int>(1,3)
。
但是,目前还不清楚正在打印哪个数组:您是否忘记为数组添加参数,例如printArray(a,1,3)
?在这种情况下,您可以从该参数推导出T
,因为它位于printArray(a,count)
版本中。
此外,返回类型void
表示即使可以推断出模板参数,也无法编写elements=printArray(1,3)
。
答案 1 :(得分:3)
您的第二个printArray
不使用T,因此不应该是模板。
编译器不将其识别为候选者的原因是因为它无法推断出T。