[英]Non-type parameter in function template
我有一个非常简单的模板函数,但是由于非类型参数,在如何实例化/调用该函数方面存在困惑。 模板函数的定义如下:
template<typename Glorp, int size>
Glorp min(Glorp array[size])
{
Glorp minival = array[0];
for (int i = 0; i < size; i++)
if (array[i] < minival)
minival = array[i];
return minival;
}
现在,在main()
我有以下代码:
void main()
{
const int size=5;
int array[size];
for (int i = 0; i < size; i++)
cin >> array[i];
int p = min(array[size]);
cout << p;
}
这使我收到错误消息:
Error 1 error C2783: 'Glorp min(Glorp *)' : could not deduce template argument for 'size' c:\users\tamara\documents\visual studio 2013\projects\nuevoprojecto\nuevoprojecto\main.cpp 23 1 NuevoProjecto
如何从main()
调用此函数? 我找不到答案,我看到的唯一示例是模板类中的非类型参数
我在您的代码中看到两个主要问题
1)模板函数接收数组的语法,推导类型和大小,如下所示
template <typename Glorp, int size>
Glorp min (Glorp (&array)[size])
{
// ...........^^^^^^^^
}
2)您必须不带[size]
来调用它
int p = min(array[size]); // wrong
int p = min(array); // correct
因为传递array[size]
您试图从未分配的内存位置传递单个int
(正确的array
值是从array[0]
到array[size-1]
)。
一个小问题: main()
返回一个int
,而不是一个void
。
脱离主题的建议:如果可以至少使用C ++ 11,请考虑尽可能使用std::array
而不是旧的C样式数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.