常量函数不能用于常量引用对象吗?

问题描述:

我不完全确定如何描述我的问题。常量函数不能用于常量引用对象吗?

基本上我有检查,看看如果我的矩形包含不同的矩形,但是一个功能,当我试图用我的功能,如getXgetY我会见了:Error: the object has type qualifiers that are not compatible with the member function object type is: const Rectangle2D

我的功能如下。

const bool Rectangle2D::contains(const Rectangle2D &r) { 
    const double x = r.getX(); 
    const double y = r.getY(); 
    const double width = r.getWidth(); 
    const double height = r.getHeight(); 
} 

get功能全部是不变的,例如:

const double Rectangle2D::getX() { 
    return x; 
} 

而且在我的课它的函数定义为const bool contains(const Rectangle2D &r)

如果需要更多信息,请告诉我。如果有人能帮助我或指出我朝着正确的方向,我将不胜感激。

+2

'bool contains(const Rectangle2D&r)const'是常量函数的正确语法。 – 2013-02-25 03:59:02

+1

...并且返回类型的'const bool'不需要。 'bool'就足够了。同样适用于你的其他'get()''ers。看起来你只是把你的'const'放在错误的地方。尝试另一端= P – WhozCraig 2013-02-25 04:01:25

+0

好的,谢谢你帮我清楚了。 – Battleroid 2013-02-25 04:06:11

你需要把const的函数名和参数列表之后,大括号或分号之前。因此,在你的类,你应该有

double getX() const; 

然后当你实现它,你应该有

double Rectangle2D::getX() const { 
    return x; 
} 

你需要做同样与包含功能,任何你想要的其他功能能够在const Rectangle2D上使用。

+0

他可能也希望'contains'是const,并且不返回const布尔值。 – QuentinUK 2013-02-25 04:03:16

完成这样:

const double Rectangle2D::getX() { 
    return x; 
} 

这是一个非const函数返回一个恒定的两倍。

要使它成为一个const函数,像这样做:

double Rectangle2D::getX() const { 
    return x; 
} 
+0

啊,好的!谢谢。 – Battleroid 2013-02-25 04:02:44