我正在撞墙。这段代码假设使用类型名模板并在我的函数中实现它们。前两个原型(prototype)函数按预期工作。第三个原型(prototype) min 给我带来了麻烦。它应该返回传递的数组中的最低值。但是,看起来好像我没有正确声明模板以使用数组。
<!-- language: lang-none -->
Error C2440 '=': cannot convert from 'int' to 'T1' Project6 56
Error C2446 '<': no conversion from 'T1' to 'int' Project6 60
Error C2440 '=': cannot convert from 'int' to 'T1' Project6 62
#include <iostream>
#include <ctime> // used for rand
template<typename T>
void assignRandom(T dataValue); // fills array with random values
template<typename T>
void print(T dataValue); // outputs array
template<typename T1>
T1 min(T1 dataValue); // identifies lowest value within array
using namespace std;
int main()
{
srand((unsigned int)time(NULL));
int data0[10];
assignRandom(data0);
cout << "Array of integer: ";
print(data0);
cout << min(data0);
return 0;
}
template<typename T>
void assignRandom(T dataValue)
{
for (int i = 0; i < 10; i++)
{
dataValue[i] = rand() % 10 + 1;
}
return;
}
template<typename T>
void print(T dataValue)
{
for (int i = 0; i < 10; i++)
{
cout << dataValue[i] << " ";
}
cout << endl;
return;
}
template<typename T1>
T1 min(T1 dataValue)
{
T1 minimum;
minimum = dataValue[0];
for (int i = 0; i < 10; i++)
{
if (dataValue[i] < minimum)
{
minimum = dataValue[i];
}
}
return minimum;
}
最佳答案
您的模板参数 T1
被推断为 int*
。所以你的函数 min 在编译器看来是这样的:
int* min(int* dataValue)
{
int* minimum;
minimum = dataValue[0]; // dataValue[0] is an int
如果您将 min
的声明更改为:
template<typename T1>
T1 min(T1* dataValue)
然后 T1
将被推断为 int
。
关于c++ - 尝试使用 int[] 作为类型名模板,编译器无法识别函数 min 原型(prototype)中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55173061/