gpt4 book ai didi

c++ - 传递类对象/构造函数错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:43 25 4
gpt4 key购买 nike

我目前正在编写我正在做的程序的实现文件。我在其中包含了头文件,这就是为什么您看不到通常看到的那么多

在这个程序中,您看到的所有函数都包含在一个名为“Body”的类中。成员函数是公共(public)的,除了 std::istream 被认为是“ friend ”并且变量是私有(private)的

我想了解为什么会出现此错误:

"passing const Body as 'this' argument of double Body::getX() discards qualifiers"

此错误指向我编写的 distanceTo 函数。我有点理解错误消息的意思,但我确实需要 distantTo 函数的传递参数保持不变。有什么办法可以解决这个问题吗?

这是我的程序的整体 View :

#include "Body.h"
#include <cmath>
#include <vector>
#include <fstream>


Body::Body(std::string _name, double _mass, double _x,
double _y, double _vx, double _vy)
{
name = _name;
mass = _mass;
x = _x;
y = _y;
vx = _vx;
vy = _vy;
}

double Body::getX()
{
return x;
}

double Body::getY()
{
return y;
}

double Body::getVX()
{
return vx;
}

double Body::getVY()
{
return vy;
}

double Body::getMass()
{
return mass;
}

void Body::setX(double _x)
{
x = _x;
}

void Body::setY(double _y)
{
y = _y;
}

void Body::setVX(double _vx)
{
vx = _vx;
}

void Body::setVY(double _vy)
{
vy = _vy;
}

void Body::draw(Canvas &canvas)
{
canvas.DrawCircle(getX(), getY(), 10);
canvas.DrawText(getX()+2, getY(), name);
}


istream &Body::operator>>(std::istream &input, Body &body)
{

input >> body.name >> body.mass >> body.x >> body.y >> body.vx >> body.vy;

return input;

}


double Body::distanceTo(const Body &other)
{
double tx = x-other.getX();
double ty = y-other.getY();
double ans = sqrt(tx*tx + ty *ty);

return ans;
}

double Body::forceX(double G, const Body &body)
{
double d = distanceTo(body);
double d3=d*d*d;
double tx = x - getX();
double dx= sqrt( tx * tx );
double fx = G * ((mass * getMass() * dx) / d3);

return fx;
}

double Body::forceY(double G, const Body &body)
{
double d = distanceTo(body);
double d3=d*d*d;
double ty = y - getX();
double dy= sqrt( ty * ty );
double fy = G * ((mass * getMass() * dy) / d3);

return fy;
}

私有(private)数据:

std::string name;
double x, y;
double vx, vy;
double mass;

最佳答案

让你的 get 成员函数保持不变,这些函数没有任何变化,并且会让你的 distance 函数按预期工作

double getX() const;
double getY() const;

澄清一下,正如克里斯在评论中指出的那样,您不能使用常量对象调用非常量函数。您向编译器 promise 该对象永远不会更改,因此您需要提供常量函数以使编译器满意。

关于c++ - 传递类对象/构造函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16226564/

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