В моем заголовочном файле есть следующее:
template<typename T>
class rational {
private:
T num;
T denom;
T gcd(T x, T y);
public:
rational(T num, T denom);
rational(T wholeNumber);
template<typename U>
friend inline rational<U> operator *(const rational<U> &lhs, const rational<U> &rhs);
}
template<typename T>
rational<T>::rational(T whole) {
this->num = whole;
this->denom = 1;
}
template<typename T>
rational<T> operator *(const rational<T> &lhs, const rational<T> &rhs) {
return rational<T>(lhs.num * rhs.num, lhs.denom * rhs.denom);
}
И следующее у меня в основном:
rational<int> x(6), y(2);
rational<int> product = y * x; // this works
rational<int> product2 = 2 * x; // this doesn't
Первый продукт работает, но второй дает мне «ошибка: нет совпадения для« оператора * »в« 2 * х ». Зачем? Поскольку имеется конструктор, который принимает в качестве аргумента только 2, разве это не должно вызываться автоматически? Если нет, как еще мне перегрузить оператор, чтобы они оба работали?
Спасибо.