我读的有效C++(斯科特迈尔斯),并试图从本书编译下面的代码时收到错误“无匹配的运算符*”:敌不过运算符*
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;
}
有人可以解释为什么会发生这种情况吗?
您是否需要在.h文件中声明'operator *'?如果你把所有的类和代码放入main.cpp中,它会起作用吗? – Rup 2012-04-12 15:35:45
是的,它在main.cpp中编译内联。但为什么 ? – 2012-04-12 15:38:55
@Tony_M:关于你如何不知道声明和定义,还要实现运算符,常量和所有:这是否甚至是你自己的代码?/oops,你是指Scott Meyers。我认为你应该首先得到一本介绍性的书,而不是一个体现和强化你的基本技能的书。 – 2012-04-12 15:57:39