C++ C++;模板重载

C++ C++;模板重载,c++,templates,operator-overloading,C++,Templates,Operator Overloading,我正在学习超载。我的代码有什么问题?以下是“const\u Tp&std::max(const\u Tp&,const\u Tp&,\u Compare)[with\u Tp=double;\u Compare=double]的实例化中的错误信息: /usr/include/c++/4.8/bits/stl_algobase.h:263:26:错误:“u comp”不能用作函数 如果(uuu comp(uuu a,uu b)) #包括 使用名称空间std; 模板T1最大值(T1、T2、T3);

我正在学习超载。我的代码有什么问题?以下是“const\u Tp&std::max(const\u Tp&,const\u Tp&,\u Compare)[with\u Tp=double;\u Compare=double]的实例化中的错误信息: /usr/include/c++/4.8/bits/stl_algobase.h:263:26:错误:“u comp”不能用作函数 如果(uuu comp(uuu a,uu b))

#包括
使用名称空间std;
模板T1最大值(T1、T2、T3);
模板T1最大值(T1,T2);
模板
T1最大值(T1 x,T2 y){
返回x+y;
}
模板
T1最大值(T1 x,T2 y,T3 z){
返回x+y+z;
}
int main()
{

cout来自编译器的错误消息清楚地表明编译器使用的是
std::max
,而不是文件中定义的函数。这是您应该避免的另一个原因

using namespace std;
要解决您的问题,请执行以下操作:

  • 拆下那条线
  • 使用
    std::cout
    std::endl
    而不仅仅是
    cout
    endl
    。如果要继续使用
    cout
    endl
    ,请添加

    using std::cout;
    using std::endl;
    

  • 来自编译器的错误消息清楚地表明编译器使用的是
    std::max
    ,而不是文件中定义的函数。这是您应该避免的另一个原因

    using namespace std;
    
    要解决您的问题,请执行以下操作:

  • 拆下那条线
  • 使用
    std::cout
    std::endl
    而不仅仅是
    cout
    endl
    。如果要继续使用
    cout
    endl
    ,请添加

    using std::cout;
    using std::endl;
    

  • 另一种解决方案是完全指定应调用哪个
    max
    (即std中的一个或此文件中的一个):

    #包括
    使用名称空间std;
    模板T1最大值(T1、T2、T3);
    模板T1最大值(T1,T2);
    模板
    T1最大值(T1 x,T2 y){
    返回x+y;
    }
    模板
    T1最大值(T1 x,T2 y,T3 z){
    返回x+y+z;
    }
    int main()
    {
    
    cout另一种解决方案是完全指定应调用哪个
    max
    (即std中的一个或此文件中的一个):

    #包括
    使用名称空间std;
    模板T1最大值(T1、T2、T3);
    模板T1最大值(T1,T2);
    模板
    T1最大值(T1 x,T2 y){
    返回x+y;
    }
    模板
    T1最大值(T1 x,T2 y,T3 z){
    返回x+y+z;
    }
    int main()
    {
    
    难道这不是完整的错误消息,而且
    使用名称空间std;
    在这里肯定帮不了你(注意错误怎么说
    std::max
    ).BTW,根据实现,它应该被命名为
    sum
    ,而不是
    max
    。这不是完整的错误消息,
    使用命名空间std;
    在这里肯定帮不了你(注意错误怎么说
    std::max
    )。顺便说一句,根据实现,它应该被命名为
    sum
    ,而不是
    max