1

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

2 回答 2

6

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

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

此外,返回类型意味着即使可以推导出模板参数,void您也无法编写。elements=printArray(1,3)

于 2012-04-17T21:04:34.350 回答
3

您的第二个printArray不使用 T,因此不应该是模板。

编译器不将其识别为候选的原因是它无法推断出 T。

于 2012-04-17T21:04:49.163 回答