模板类如何在类外定义构造函数

模板类如何在类外定义构造函数

#include <iostream>
using namespace std;
template<class t>
class Absolute
{
private:
    t item;
public:
    Absolute(t temp);
    t getValue(void)const;
};
template<class t>
Absolute<t>::Absolute(t temp):item(temp)
template<class t>
t Absolute<t>::getValue(void)const
{
    return (item>=0)?item:(-item);
}
int main(void) {
    char c='\0';
    int i=0;
    long l=0;
    scanf("%c%d%ld",&c,&i,&l);
    float f=1.1;
    double d=2.2;
    scanf("%f%lf",&f,&d);
    Absolute<char> dc(c);
    cout<<dc.getValue()<<endl;
    Absolute<int> di(i);
    cout<<di.getValue()<<endl;
    Absolute<long> dl(l);
    cout<<dl.getValue()<<endl;
    Absolute<float> df(f);
    cout<<df.getValue()<<endl;
    Absolute<double> dd(d);
    cout<<dd.getValue()<<endl;
    return 0;
}


13行我在类外定义的构造 但报错了

Absolute<t>::Absolute(t temp):item(temp)之后应该加{}, 函数体的{}不能没有
改成
Absolute<t>::Absolute(t temp):item(temp){}
或者改成

template<class t>
Absolute<t>::Absolute(t temp){
    item = temp;
}


你题目的解答代码如下:

#include <iostream>
using namespace std;
template<class t>
class Absolute
{
private:
    t item;
public:
    Absolute(t temp);
    t getValue(void)const;
};
template<class t>
Absolute<t>::Absolute(t temp){
    item = temp;
}
template<class t>
t Absolute<t>::getValue(void)const
{
    return (item>=0)?item:(-item);
}
int main(void) {
    char c='\0';
    int i=0;
    long l=0;
    scanf("%c%d%ld",&c,&i,&l);
    float f=1.1;
    double d=2.2;
    scanf("%f%lf",&f,&d);
    Absolute<char> dc(c);
    cout<<dc.getValue()<<endl;
    Absolute<int> di(i);
    cout<<di.getValue()<<endl;
    Absolute<long> dl(l);
    cout<<dl.getValue()<<endl;
    Absolute<float> df(f);
    cout<<df.getValue()<<endl;
    Absolute<double> dd(d);
    cout<<dd.getValue()<<endl;
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img