当我尝试在成员函数内使用我的get函数之一时,会发生错误。错误是:
无效的参数'。候选人是:int getTotalArea()。
这是我的代码中的一个例子:
class Apartment{
public : // ...
enum SquareType {EMPTY, WALL, NUM_SQUARE_TYPES};
bool operator<(const Apartment& apartment); // done - need help
int getTotalArea(); // done
private:
int price;
int length;
int width;
SquareType** squares;
};
int Apartment::getTotalArea()
{
int count=0;
for(int i=0;i<width;i++)
{
for(int j=0;j<length;j++)
{
if(squares[i][j]==EMPTY)
{
count++;
}
}
}
return count;
}
bool Apartment::operator<(const Apartment& apartment)
{
int thisArea=this->getTotalArea();
int paramArea=apartment.getTotalArea(); // the error line is here !!!
//the error is Invalid arguments '. Candidates are : int getTotalArea() .
double thisRatio=((double)price)/thisArea;
double paramRatio=((double)apartment.price)/paramArea;
if(thisRatio==paramRatio)
{
return price < apartment.price;
}
return thisRatio<paramRatio;
}
我做错了吗?
这是我第一次使用c ++ ...顺便说一下 - 对其余代码的任何评论都很好。
答案 0 :(得分:2)
从PcAF的答案来看,你似乎在没有修改问题的情况下大幅改变了你的初始帖子。 非常糟糕!
但是,您getTotalArea
现在遇到的问题是它没有被声明const
。
答案 1 :(得分:1)
好像你误解了运算符重载(作为成员)
当将某个运算符重载为成员时,该运算符的第一个操作数是对象,其上称为成员运算符重载,第二个操作数是该函数的参数(如果是二元运算符)。
运算符+
可用作二进制(2个操作数)或一元运算符(1个操作数)。
这里似乎想要将二进制版本重载为成员:
Apartment operator+(const Apartment& apartment1,const Apartment& apartment2);
但是因为第一个操作数是该成员&#34;函数&#34;被称为必须只有1个参数(这是第二个操作数)。
Apartment operator+(const Apartment& apartment2);
这是第二个错误:
Apartment& operator=(SquareType** squares, int length, int width, int price);
operator =
是二元运算符(2个操作数),因此如果你想将它作为成员函数重载,它必须只取一个参数(这是=
的第二个操作数),而不是4个参数