2013-04-25 88 views
1

我正在编写我正在执行的程序的实现文件。我在其中包含头文件,这就是为什么你看不到你通常看到的那么多传递类/构造函数错误的对象

这是程序中你看到的所有功能都包含在名为“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; 
+3

换句话说,你不能在const对象上调用非const函数。 – chris 2013-04-25 23:52:59

+0

小方面说明,在大多数情况下,使用_ infront的变量是不好的做法。 – 2013-04-25 23:58:58

+0

好吧我现在明白了这个错误 – user2188311 2013-04-25 23:59:51

回答

1

让你的get成员函数不变,没有在这些功能的变化,将让你的距离函数工作如预期的那样

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

为了澄清,正如克里克在co指出的你不能用常量对象调用非const函数。你承诺编译器的对象不会改变以往的东西,所以你需要提供常量函数来使编译器感到满意。

+0

好的谢谢。解释更有意义 – user2188311 2013-04-26 00:03:57

相关问题