我正在編寫我正在執行的程序的實現文件。我在其中包含頭文件,這就是爲什麼你看不到你通常看到的那麼多傳遞類/構造函數錯誤的對象
這是程序中你看到的所有功能都包含在名爲「Body」的類中。成員函數都是公開的,除了這被認爲是「朋友」的std::istream
和變量是私有
我試圖理解爲什麼我收到此錯誤:
"passing const Body as 'this' argument of double Body::getX() discards qualifiers"
此錯誤指向我distanceTo
我寫的功能。我有點理解錯誤信息是說什麼,但我真的需要distantTo
函數的傳遞參數是不變的。任何解決這個問題的方法?
這是我計劃的整體視圖:
#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;
}
私人數據:
std::string name;
double x, y;
double vx, vy;
double mass;
換句話說,你不能在const對象上調用非const函數。 – chris 2013-04-25 23:52:59
小方面說明,在大多數情況下,使用_ infront的變量是不好的做法。 – 2013-04-25 23:58:58
好吧我現在明白了這個錯誤 – user2188311 2013-04-25 23:59:51