如何创建和调用与其他函数同名的函数?

How to create and call function with same name as other function?

提问人:Calmest205PL 提问时间:8/29/2021 更新时间:8/30/2021 访问量:55

问:

我正在开发自己的库,我想创建函数 max()。我知道这样的函数存在于 C++ 中,它不在命名空间 std 中,所以使用命名空间 std 擦除;无济于事。我在我的命名空间中创建这个函数,如下所示:

namespace ml
{
    template<typename T>T max(T cntr, int size)//I'm getting errors here
    {
         sort(cntr,0,size-1);//my function which just sorts elements, it's working fine
         return cntr[size-1];
    }
}

这是我的主要功能:

#include <iostream>
#include <ctime>
#include "mylib.hpp"

int main()
{
    srand(time(NULL));
    int* arr, n;
    std::cin>>n;
    arr = new int [n];
    for(int i = 0; i < n; i++)
    {
         arr[i] = rand()%100;
    }
    int maximum = ml::max(arr,n);//I'm getting errors here
    std::cout<<maximum<<'\n';
    return 0;
}

如果我这样做了,对不起语法错误。

C++ 函数 命名空间

评论

2赞 Bert 8/29/2021
如果您包含错误消息,将会有所帮助。从外观上看,您的模板参数 T 被推导出为一个 int 数组,但您传回了一个 int,这显然是不一样的。该问题与命名空间或函数名称无关。
0赞 Calmest205PL 8/29/2021
有一个问题,我来自波兰,我正在使用波兰语版本的 Visual Studio,所以我不知道什么是英文翻译,我所能做的就是将它们复制到 Google 翻译或仅发布错误代码
1赞 Mike Vine 8/30/2021
T 被推导出为 int*,但你返回 8ng 一个 int。
0赞 Pete Becker 8/30/2021
standard-library 函数在 中定义maxstd

答:

0赞 Pete Becker 8/30/2021 #1

如果该函数的目的是搜索 C 样式的数组,则签名应为 。(注意 as 的类型 )这样,当它被 和 调用时,就会被推导出为 ,这就是正确的返回类型。template <typename T> T max(T* cntr, int size)T*cntrint*Tint