码迷,mamicode.com
首页 > 其他好文 > 详细

第16周上机实践项目3——max带来的冲突

时间:2015-06-21 18:30:40      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:编译   using   模板   max   int   

分析下面程序出现的编译错误,给出解决的方案。

#include<iostream>
using namespace std;
//定义函数模板
template<class T>
T max(T a, T b)
{
    return (a>b)?a:b;
}

int main()
{
    int x=2,y=6;
    double x1=9.123,y1=12.6543;
    cout<<"把T实例化为int:"<<max(x,y)<<endl;
    cout<<"把T实例化为double:"<<max(x1,y1)<<endl;
    return 0;
}

其实C++中有了一个标准的max函数,经过一年多的学习也知道了这一点,每次打出max的时候,codeblocks就会给出补充,这明显是已经定义过了的,所以解决方法有一下几种

1、在max前加std::,代表使用标准库中的max

#include<iostream>
using namespace std;
//定义函数模板
template<class T>
T max(T a, T b)
{
    return (a>b)?a:b;
}
int main()
{
    int x=2,y=6;
    double x1=9.123,y1=12.6543;
    cout<<"把T实例化为int:"<<std::max(x,y)<<endl;
    cout<<"把T实例化为double:"<<std::max(x1,y1)<<endl;
    return 0;
}

2、在max前加::,代表使用当前定义的max

#include<iostream>
using namespace std;
//定义函数模板
template<class T>
T max(T a, T b)
{
    return (a>b)?a:b;
}
int main()
{
    int x=2,y=6;
    double x1=9.123,y1=12.6543;
    cout<<"把T实例化为int:"<<::max(x,y)<<endl;
    cout<<"把T实例化为double:"<<::max(x1,y1)<<endl;
    return 0;
}

3、把using namespace std改成using std::cout;using std::endl,代表只使用标准库中的cout和endl

#include<iostream>
using std::cout;
using std::endl;
//定义函数模板
template<class T>
T max(T a, T b)
{
    return (a>b)?a:b;
}
int main()
{
    int x=2,y=6;
    double x1=9.123,y1=12.6543;
    cout<<"把T实例化为int:"<<max(x,y)<<endl;
    cout<<"把T实例化为double:"<<max(x1,y1)<<endl;
    return 0;
}

第16周上机实践项目3——max带来的冲突

标签:编译   using   模板   max   int   

原文地址:http://blog.csdn.net/blue_skyrim/article/details/46583147

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!