avd avd - 3 months ago 6
C++ Question

C++ const qualifier

I have a Point2D class as follows:

class Point2D{
int x;
int y;
public:
Point2D(int inX, int inY){
x = inX;
y = inY;
};

int getX(){return x;};
int getY(){return y;};
};


Now I have defined a class
Line
as:

class Line {
Point2D p1,p2;
public:
LineVector(const Point2D &p1,const Point2D &p2):p1(p1),p2(p2) {
int x1,y1,x2,y2;
x1=p1.getX();y1=p1.getY();x2=p2.getX();y2=p2.getY();
}
};


Now the compiler gives the error in the last line( where
getX()
etc are called):


error: passing
const Point2D
as
this
argument of
int Point2D::getX()
discards qualifiers


If I remove the
const
keyword at both places, then it compiles successfully.

What is the error? Is it because
getX()
etc are defined inline? Is there any way to rectify this retaining them inline?

Answer

You have not declared getX() and getY() methods as const. In C++, you can only call const methods from a const object. So your function signature should be int getX() const{..}. By defining them as the const method you are telling the compiler that you are not going to modify any member variable inside this method. Since your object is a const object, it is not supposed to be modified hence you can call only call const methods on it.