传递类/构造函数错误的对象

时间:2013-04-25 23:50:41

标签: c++

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

这是您看到的所有功能都包含在名为“Body”的类中的程序。成员函数是公共的,除了std::istream被认为是“朋友”而变量是私有的

我试图理解为什么会收到此错误:

  

“将const Body作为'this'参数传递给double Body :: getX()会丢弃限定符”

此错误指向我编写的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;

1 个答案:

答案 0 :(得分:1)

使你的get成员函数保持不变,这些函数没有任何变化,并且你的距离函数可以按预期工作

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

为了澄清,正如克里斯在评论中指出的那样,你不能用常量对象调用非const函数。你承诺编译器对象不会改变那样,所以你需要提供常量函数来使编译器满意。