标题:类模板的问题
只看楼主
tszhao
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-3-4
 问题点数:0 回复次数:6 
类模板的问题
#include <iostream>
using namespace std;
template <class T>
class compare
{
public:
    compare(T x,T y):a(x),b(y){}
    T max();
private:
    T a;
    T b;
};
T compare::max()
{
    return (a>b)?a:b;
}
int main()
{
    compare<int> c1(3,7);
    cout<<c1.max()<<endl;
    compare<float> c2(4.4,3.2);
    cout<<c2.max()<<endl;
    return 0;
}

我实在是看不出什么错误来了,请高手解答一下哈
搜索更多相关主题的帖子: 模板 compare max std using 
2008-03-24 20:54
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
#include <iostream>
using namespace std;
template <class T>
class compare
{
public:
    compare(T x,T y):a(x),b(y){}
    T max();
private:
    T a;
    T b;
};
template<class T>
 T compare<T>::max()
{
    return (a>b)?a:b;
}
int main()
{
    compare<int> c1(3,7);
    cout<<c1.max()<<endl;
    compare<float> c2(4.4,3.2);
    cout<<c2.max()<<endl;
    return 0;
}

学习需要安静。。海盗要重新来过。。
2008-03-24 21:03
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
这样就没有警告了
#include <iostream>
using namespace std;
template <class T>
class compare
{
public:
    compare(T x,T y):a(x),b(y){}
    T max();
private:
    T a;
    T b;
};
template<class T>
 T compare<T>::max()
{
    return (a>b)?a:b;
}
int main()
{
    compare<int> c1(3,7);
    cout<<c1.max()<<endl;
    compare<float> c2((float)4.4,(float)3.2);
    cout<<c2.max()<<endl;
    return 0;
}

学习需要安静。。海盗要重新来过。。
2008-03-24 21:18
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
得分:0 
((float)4.4,(float)3.2)为什么要显式的转换啊 4.4不就是float型吗
2008-03-24 21:28
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
得分:0 
编译器把(4.4,3.2)当作DOUBLE了,所以要显示转换一下才不会有警告。当然你也可以这样:
compare<double> c2(4.4,3.2);
这样也不会有警告!

i like linux...
2008-03-24 22:27
handongxue
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-3-25
得分:0 
类模板成员函数定义错误,
#include<iostream>
using namespace std;

template <class T>
class compare
{
public:
    compare(T x,T y):a(x),b(y){}
    T max();
private:
    T a;
    T b;
};

template <class T>    //必须指定成员函数的类模板前缀
T compare<T>::max()   //这样定义类模板成员函数
{
    return (a>b)?a:b;
}
int main()
{
    compare<int> c1(3,7);
    cout<<c1.max()<<endl;
    compare<float> c2(4.4,3.2);
    cout<<c2.max()<<endl;
    return 0;
}
2008-03-25 16:19
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
在类外面定义函数体这个是必须要注意的。。。

学习需要安静。。海盗要重新来过。。
2008-03-25 16:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-205119-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.116238 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved