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

类模板的问题

tszhao 发布于 2008-03-24 20:54, 958 次点击
#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;
}

我实在是看不出什么错误来了,请高手解答一下哈
6 回复
#2
sunkaidong2008-03-24 21:03
#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;
}
#3
sunkaidong2008-03-24 21:18
这样就没有警告了
#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;
}
#4
newyj2008-03-24 21:28
((float)4.4,(float)3.2)为什么要显式的转换啊 4.4不就是float型吗
#5
zjl1382008-03-24 22:27
编译器把(4.4,3.2)当作DOUBLE了,所以要显示转换一下才不会有警告。当然你也可以这样:
compare<double> c2(4.4,3.2);
这样也不会有警告!
#6
handongxue2008-03-25 16:19
类模板成员函数定义错误,
#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;
}
#7
sunkaidong2008-03-25 16:30
在类外面定义函数体这个是必须要注意的。。。
1