平日小问题 (1): call of overloaded 'max(char&, char&)' is ambiguous

#include <iostream>
using namespace std;

template <typename T>
T max(T x,T y)
{
    return (x>y?x:y);
}

int main()
{
    int     a1 = 1  , a2 = 2  ;
    double  b1 = 1.1, b2 = 2.2;
    char    c1 = 'a', c2 = 'A'; 

    cout<<"Int Max: "<<max(a1,a2)<<endl;
    cout<<"Double Max: "<<max(b1,b2)<<endl;
    cout<<"Char Max: "<<max(c1,c2)<<endl;

    return 0;
}

该程序在vc6上编译时可以通过的,但是在dev上以及vs会报错。
原因在于使用了: using namespace std;而std里面含有max(char&, char&)这个函数,因此会产生二义性。
只需要改成使用std:: 即可通过编译。

修改后:

#include <iostream>

template <typename T>
T max(T x,T y)
{
    return (x>y?x:y);
}

int main()
{
    int     a1 = 1  , a2 = 2  ;
    double  b1 = 1.1, b2 = 2.2;
    char    c1 = 'a', c2 = 'A'; 

    std::cout<<"Int Max: "<<max(a1,a2)<<std::endl;
    std::cout<<"Double Max: "<<max(b1,b2)<<std::endl;
    std::cout<<"Char Max: "<<max(c1,c2)<<std::endl;

    return 0;
}

问题解答来源于:
http://blog.csdn.net/vanlin5566/article/details/17506935

你可能感兴趣的:(平日小问题)