【问题标题】:Overloaded Template Function Help - C++重载模板函数帮助 - C++
【发布时间】:2012-04-17 20:58:26
【问题描述】:

我不断收到错误消息“没有重载函数“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 的数组(并且elements 被分配了从具有返回类型void 的函数返回的值)。跨度>
  • 发布错误消息,包括其中的类型。

标签: c++ function templates overloading


【解决方案1】:

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

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

另外,void 的返回类型意味着你不能写elements=printArray(1,3),即使模板参数可以推导出来。

【讨论】:

  • 非常感谢,帮我搞定了。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2013-06-11
    相关资源
    最近更新 更多