خطا در overload عملگر جمع - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

خطا در overload عملگر جمع

+2 امتیاز

شب بخیر.

من کلاسی را به صورت زیر نوشتم و در آن عملگر حمع را overload کردم نمی دونم چرا زمانیکه کامپایل می کنم با خطایه زیر مواجه میشم.

 error C2678: binary '+' : no operator found which takes a left-hand operand of type 'int' (or there is no acceptable conversion)

 

template <class T>
class Range_{
public :
	Range_(const T &start,const T &end):start_(start),end_(end){}
	Range_ operator+(const T &value)const;
	Range_ operator-(const T &value)const;
	T start_;
	T end_;
private:
};
typedef Range_<int> BhRange_i;
typedef Range_<float> BhRange_f;


template <class T>
Range_<T>  Range_<T>::operator+(const T &value)const{
    return Range_<T>(this->start_ + value,this->end_ + value);
}
template <class T>
Range_<T> Range_<T>::operator-(const T &value)const{
    return Range_<T>(this->start_ - value,this->end_ - value);
}




int main()
{
	BhRange_i a(10,20);
	BhRange_i b(100,200);
	a =  20 + b;


	
}

 

سوال شده اسفند 10, 1392  بوسیله ی علی قربانی (امتیاز 20)   1 2

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

کلاس شما فقط زمانی که b+20 رو انجام بدین کار می کنه برای این که اون چیزی هم که می خواین کار کنه باید operator global + رو هم overload کنین :

#include <iostream>

template <class T>
class Range_{
public :
    Range_(const T &start,const T &end):start_(start),end_(end){}
    Range_ operator+(const T &value)const;
    Range_ operator-(const T &value)const;

    T start()const
    {
        return start_;
    }
    T end()const
    {
        return end_;
    }
private:
    T start_;
    T end_;
};
typedef Range_<int> BhRange_i;
typedef Range_<float> BhRange_f;


template <class T>
Range_<T>  Range_<T>::operator+(const T &value)const{
    return Range_<T>(this->start_ + value,this->end_ + value);
}
template <class T>
Range_<T> Range_<T>::operator-(const T &value)const{
    return Range_<T>(this->start_ - value,this->end_ - value);
}

template <class T> Range_<T>  operator+(const T& val,const Range_<T>& range)
{
    return range+val;
}


int main()
{
    BhRange_i a(10,20);
    BhRange_i b(100,200);
    a =  20+b;

    std::cout<<a.start()<<"  "<<a.end();

}

 

پاسخ داده شده اسفند 10, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
ویرایش شده اسفند 10, 1392 بوسیله ی BlueBlade
...