注册 登录
编程论坛 C++教室

函数模版和普通函数同名问题

观海听潮 发布于 2017-03-13 13:30, 1784 次点击
为什么运行时提示说 对重载函数的调用不明确
#include<iostream>
using namespace std;

int max(int a, int b)
{
    cout<<"普通函数"<< endl;
    return  a>b ? a:b;
}

template<typename T>
T max(T a, T b)
{
    cout<< "函数模版-1"<< endl;
    return a>b ? a:b;
}

template<typename T>
T max(T a, T b, T c)
{
    cout<<"函数模版-2"<< endl;
    return 0;//max(max(a, b), c);
}

int main()
{
    int a = 1;
    int b = 2;

    cout<<max(a, b)<< endl;        //当函数模版和普通函数都符合调用时,优先选择普通函数
    cout<<max<>(a, b)<< endl;    //如显示使用函数模版 则使用<>类型列表
    cout<<max<>(3.0, 4.0)<< endl;    //若函数模版产生更好的匹配 使用函数模版
    cout<<max<>(5.0, 6.0, 7.0)<< endl;    //重装
    cout<<max('a', 100)<< endl;    //调用普通函数 可以隐式类型转换
    return 0;
}
2 回复
#2
rjsp2017-03-13 18:30
首先应该贴出编译器的编译信息,难道想让别人用肉眼编译?

调用不明确,这个提示已经足够清晰了
#3
观海听潮2017-03-15 11:03
3q。。。
1