调用getter成员时参数无效

时间:2016-06-09 12:14:13

标签: c++

当我尝试在成员函数内使用我的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 ++ ...顺便说一下 - 对其余代码的任何评论都很好。

2 个答案:

答案 0 :(得分:2)

从PcAF的答案来看,你似乎在没有修改问题的情况下大幅改变了你的初始帖子。 非常糟糕

但是,您getTotalArea现在遇到的问题是它没有被声明const

请参阅https://stackoverflow.com/a/751690/781933了解相关信息。

答案 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个参数