它在第 13 行给出错误(没有函数模板“max5”的实例与参数列表匹配)。我不明白为什么,在我看来模板写的是正确的。
#include <iostream>
#include <array>
template <class T1, class T2>
T1 max5(T2* arr);
int main()
{
std::array<int, 5> array1 = { 1, 2, 5, 4, 10 };
std::cout << max5(&array1);
return 0;
}
template <class T1, class T2>
T1 max5(T2* arr) {
T1 value = 0;
for (int i = 0; i < 5; ++i) {
if (value < (*arr)[i])
value = (*arr)[i];
}
return value;
}
此外,如果你用它替换它
max5<int, std::array<int, 5>>(&array1);,一切都会正确显示。
问题在于
T1传递给函数的参数没有派生。例如,
T1它也可以是int,并且,例如,double。因此,有必要显式指定模板参数。或者更改模板。像这样的东西
(我首先想到的是;它可能会更漂亮)。