gpt4 book ai didi

C++ const 限定符

转载 作者:太空狗 更新时间:2023-10-29 19:41:11 28 4
gpt4 key购买 nike

我有一个 Point2D 类如下:

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

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

现在我定义了一个 Line 类:

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();
}
};

现在编译器在最后一行给出错误(调用 getX() 等的地方):

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

如果我在两个地方都删除了 const 关键字,那么它会成功编译。

错误是什么?是因为 getX() 等是内联定义的吗?有什么方法可以纠正这种情况,将它们保留在内联吗?

最佳答案

您还没有将 getX()getY() 方法声明为常量。在 C++ 中,您只能从 const 对象调用 const 方法。所以你的函数签名应该是 int getX() const{..}。通过将它们定义为 const 方法,您告诉编译器您不会修改此方法内的任何成员变量。由于您的对象是一个 const 对象,因此不应对其进行修改,因此您只能对其调用 const 方法。

关于C++ const 限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689186/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com