【问题标题】:How to create and call function with same name as other function?如何创建和调用与其他函数同名的函数?
【发布时间】:2021-10-28 12:22:50
【问题描述】:

我正在开发自己的库,我想创建函数 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;
}

如果我这样做了,请原谅语法错误。

【问题讨论】:

  • 如果您包含错误消息会有所帮助。从外观上看,您的模板参数 T 被推导出为一个 int 数组,但您传回的是一个 int,这显然不一样。该问题与命名空间或函数名称无关。
  • 有一个问题,我来自波兰,我使用的是波兰语版本的 Visual Studio,所以我不知道什么是英文翻译,我所能做的就是将它们复制到谷歌翻译或只发布错误代码
  • T 被推断为一个 int* 但您返回的是一个 int。
  • 标准库函数maxstd中定义。

标签: c++ function namespaces


【解决方案1】:

如果函数的目的是搜索 C 样式数组,则签名应为 template &lt;typename T&gt; T max(T* cntr, int size)。 (注意T*cntr 的类型)这样,当用int* 调用它时,T 被推断为int,这就是正确的返回类型。

【讨论】:

    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多