2013-04-25 91 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

相關問題