c++ - 尝试使用 int[] 作为类型名模板,编译器无法识别函数 min 原型(prototype)中的参数

标签 c++ arrays templates

我正在撞墙。这段代码假设使用类型名模板并在我的函数中实现它们。前两个原型(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/

相关文章:

C++ - 使用另一个类的构造函数实例化一个对象

c++ - 在 C++ 中,strrchr 返回 nullptr 而不是 NULL 吗?

arrays - Delphi 数组与对象

javascript - 如何在 JavaScript 中将字符串数组转换为对象数组?

c++ - 我可以重复使用同一个模板来声明/定义多个东西(不复制模板代码)吗?

c++ - 在 C++ 中用给定的字母打印三角形

c++ - 关于C++内联函数的几个问题

c - 数组与 C 编程语言中的结构体和 union 有何不同?

c++ - 为什么模板只能在头文件中实现?

c++ - VC++ 6.0 中的 Cfitsio 错误