Читаем Эффективное использование C++ (Scott Meyers) и получает ошибку «не подходят для оператора *» при попытке компиляции следующего кода из этой книги:нет матча для оператора *
rational.h
class rational
{
private:
int num;
int den;
public:
rational(int n = 0, int d = 1);
int getNum() const {return num;}
int getDen() const {return den;}
};
rational.cpp
#include "rational.h"
rational::rational(int n,
int d)
:num(n),
den(d)
{}
const rational operator*(const rational &lhs,
const rational &rhs)
{
return rational(lhs.getNum()*rhs.getNum(),
lhs.getDen()*rhs.getDen());
}
main.cpp
#include "rational.h"
int main()
{
rational r1(1,2);
rational r2;
r2 = 2*r1;
r2 = r1*3;
return 0;
}
Может кто-нибудь объяснить, почему это происходит?
Вам нужно объявить 'operator *' в файле .h? Работает ли он, если вы поместите все классы и код в строку в main.cpp? – Rup
Да, его компиляция в строке в main.cpp. Но почему ? –
@Tony_M: Что касается того, как вы не знаете о декларациях и определениях, но реализуете операторы, константы и все: это даже ваш собственный код?/oops, вы ссылаетесь на Скотта Мейерса. Я думаю, что сначала вы должны получить вводную книгу, а не та, которая проявляет и обеспечивает ваши основные навыки. –