首页 > C++写的一个简单类模版 友元函数求最大最小值

C++写的一个简单类模版 友元函数求最大最小值

如题 , 编译时总是说 [Error] ld returned 1 exit status (编译器dev c++)

`#include<iostream>
using namespace std;
template <typename t>
class CValue {
    t data[5];
    public:
        CValue() {
            cout<<"please input 5 numbers"<<endl;
            for(int i = 0; i < 5; i++)
                cin>>data[i];
}
        friend t Max(CValue <t> &a);
        friend t Min(CValue <t> &a);
}; 
template <typename t> t Max(CValue <t> &a) {
    t x = a.data[0];
    for(int i = 1; i < 5; i++)
        if(x < a.data[1]) x = a.data[1];
    return x;
}
template <typename t> t Min(CValue <t> &a) {
    t min = a.data[0];
    for(int i = 1; i < 5; i++)
        if(min > a.data[1]) min = a.data[1];
    return min;
}
int main() {
     cout<<"整数对象a,";
    CValue<int> a;
    cout<<"浮点数对象b,";
    CValue<float> b;
    cout<<"整数元素对象a的元素最大值为:"<<Max(a)<<endl;
    cout<<"整数元素对象a的元素最小值为:"<<Min(a)<<endl;
    cout<<"浮点数元素对象b的元素最大值为:"<<Max(b)<<endl;
    cout<<"浮点数元素对象b的元素最小值为:"<<Min(b)<<endl;

}
`

这个错是因为你忘记在main函数里写返回了啊!!!


  1. 修改了一下,看报错的行数,你就知道自己错哪里了。
  2. 还有取最大小值if(x < a.data[1]) x = a.data[1];下标应该是i
  3. 多用花括号,哪怕只有一行语句,保证程序可读性。
#include<iostream>
using namespace std;
template <typename t>
class CValue {
    t data[5];
    public:
        CValue() {
            cout<<"please input 5 numbers"<<endl;
            for(int i = 0; i < 5; i++)
                cin>>data[i];
}
        friend t Max(CValue <t> &a);
        friend t Min(CValue <t> &a);
}; 
template <typename t> t Max(CValue <t> &a) {
    t x = a.data[0];
    for(int i = 1; i < 5; i++)
    {
        if(x < a.data[i]){
            x = a.data[i];
        }
    }
    return x;
}
template <typename t> t Min(CValue <t> &a) {
    t min = a.data[0];
    for(int i = 1; i < 5; i++){
        if(min > a.data[i]){
            min = a.data[i];
        }
    }      
    return min;
}
int main() {
    cout<<"整数对象a,";
    CValue<int> a;
    cout<<"浮点数对象b,";
    CValue<float> b;
    cout<<"整数元素对象a的元素最大值为:"<<Max(a)<<endl;
    cout<<"整数元素对象a的元素最小值为:"<<Min(a)<<endl;
    cout<<"浮点数元素对象b的元素最大值为:"<<Max(b)<<endl;
    cout<<"浮点数元素对象b的元素最小值为:"<<Min(b)<<endl;
    return 0;
}


你需要实例化模板函数friend t Max<>(CValue <t> &a)

c#include<iostream>
using namespace std;

template <typename T> class CValue;

template <typename T> T Max(CValue<T> &a) {
    T x = a.data[0];
    for(int i = 1; i < 5; i++)
        if(x < a.data[i]) x = a.data[i];
    return x;
}
template <typename T> T Min(CValue<T> &a) {
    T min = a.data[0];
    for(int i = 1; i < 5; i++)
        if(min > a.data[i]) min = a.data[i];
    return min;
}

template <typename T>
class CValue {
    T data[5];
public:
    CValue() {
        cout << "please input 5 numbers" << endl;
        for(int i = 0; i < 5; i++)
            cin>>data[i];
    }
    friend T Max<>(CValue<T> &a);
    friend T Min<>(CValue<T> &a);
};

int main() {
    cout << "整数对象a,";
    CValue<int> a;
    cout << "浮点数对象b,";
    CValue<float> b;
    cout << "整数元素对象a的元素最大值为:" << Max(a) << endl;
    cout << "整数元素对象a的元素最小值为:" << Min(a) << endl;
    cout << "浮点数元素对象b的元素最大值为:" << Max(b) << endl;
    cout << "浮点数元素对象b的元素最小值为:" << Min(b) << endl;
}
【热门文章】
【热门文章】