重载的模板函数帮助 - C ++

时间:2012-04-17 20:58:27

标签: c++ function templates overloading

我一直收到错误“没有重载函数的实例”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 );

2 个答案:

答案 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。