关于C ++中的const限定符

时间:2014-06-23 11:12:33

标签: c++ operator-overloading const

我无法理解为什么它不接受const限定词的错误

[Error] passing 'const abc' as 'this' argument of 'int abc::getarea()' discards qualifiers [-fpermissive]  

以下是代码。

   #include<iostream>
    using namespace std;

    class abc{
    public:

    abc(){
    }

abc(int a,int b){

      length=a;
      height=b;
    }
    int getarea(){

        return length*height;
    }
     bool operator <(const abc&) const;

      private:
       int length;
       int height;  
    };
     bool abc::operator <(const abc& d) const{

       return getarea() < d.getarea();

     }


     int main(){

       abc a(10,12);
       abc b(13,15);
       if(a < b)
       cout << "\n B has larger volume";
       else
       cout << "\n A has larger volume"; 


        return 0;
     }  

2 个答案:

答案 0 :(得分:1)

int abc::getarea()未标记为const,但它正在来自其const个成员函数之一的const对象上调用。您应该将getarea成员函数标记为const,因为它不会更改对象的状态。

答案 1 :(得分:1)

getarea不是const,因此无法在const个对象(或const对象)上调用它。要解决此问题,请将其声明为const

int getarea() const {
    //        ^^^^^
    return length*height;
}