我不断收到错误消息“没有重载函数“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 );

最佳答案

printArray的第二个重载是模板,但是签名不依赖于模板参数T。因此,您必须在 call 时指定它,例如printArray<int>(1,3)

但是,不清楚要打印哪个数组:您是否忘记为数组添加参数,例如printArray(a,1,3)?在这种情况下,您可以从该参数推导T,就像printArray(a,count)版本中的一样。

同样,void的返回类型意味着即使可以推导出template参数,也无法编写elements=printArray(1,3)

08-17 00:21