dziwne błędy z typem double

0

Mam taką klasę:

class Point
{
public:
    double x,y;
    double r,g,b;
    Point()
    {
        x=0;
        y=0;
        r=0;
        g=0;
        b=0;
    }
    Point(double X,double Y)
    {
        Point();
        x=X;
        y=Y;
    }
    Point(double X,double Y,double R,double G,double B)
    {
        Point(X,Y);
        r=R;
        g=G;
        b=B;
    }
}; 

i zapisuje do niej x i y punktów... Potem wyświetlam je za pomocą biblioteki opengl-vertex2d. Jeśli w funkcji wyświetlania podam sam wartości to wyświetla je normalnie jednak kiedy korzystam z klasy nic się nie dzieje a wartości są inne niż podałem... jedyne co robię to przekazuję po kolei wartości zmiennych i nie modyfikuję ich.

0

po paru eksperymentach doszedłem do tego, że wyświetlam dane jakie otrzymałem, a potem dane po wczytaniu i wartości są różne, mimo, że po prostu je przypisuje... jak to działa?

0

pokaz kod gdy korzystasz z klasy.

1

Za mało informacji!
W tej chwili można powiedzieć tylko jedno: skorzystaj z debuggera i na tej podstawie ustal kiedy wartości ci się psuja.

A ten konstruktory zdefiniowałeś na odwrót. Tak było by logiczniej:

class Point
{
    double x,y;
    double r,g,b;

public:
    Point(double X,double Y,double R,double G,double B)
    : x(X)
    , y(Y)
    , r(R)
    , g(G)
    , b(B)
    {}

    Point(double X,double Y)
    :  Point(X,Y, 0, 0, 0);
    {}

    Point()
    : Point(0,0)
    {}

};
0

a więc wyświetlam tak

helpcoords.x=models[object.walls[i].id].points[j].x;
 helpcoords.y=models[object.walls[i].id].points[j].y;
rotation(object.walls[i].angle,helpcoords.x,helpcoords.y);
helpcoords.x+=object.walls[i].coords.x;
helpcoords.y+=object.walls[i].coords.y;
helpcoords.x/=960;
helpcoords.y/=540;
glColor3f(1.0f,1.0f,1.0f);
glVertex2d(helpcoords.x,helpcoords.y); 

helpcoords to pomocnicza zmienna posiadająca x i y typu double, object to klasa mająca vector walls a walls ma vector typu points więc objects i walls można pominąć bo to działa poprawnie tu jest wczytywanie pukntów:

models[0].points.push_back(Point(0.1,0.1,1.0,1.0,1.0));
models[0].points.push_back(Point(-0.1,0.1,1.0,1.0,1.0));
models[0].points.push_back(Point(-0.1,-0.1,1.0,1.0,1.0));
models[0].points.push_back(Point(0.1,-0.1,1.0,1.0,1.0)); 

models ma vector<point>points

0

ok są postępy, poprawiłem lekko wczytywanie do klasy i wiem gdzie był błąd ale nie wiem dlaczego. Poprawiona klasa point:

class Point
{
public:
    double x,y;
    double r,g,b;
    Point()
    {
        x=0;
        y=0;
        r=0;
        g=0;
        b=0;
    }
    Point(double X,double Y)
    {
        Point();
        x=X;
        y=Y;
    }
    Point(double X,double Y,double R,double G,double B)
    {
        cout << X << "|" << Y << endl;
        Point();
        x=X;
        y=Y;
        cout << x << "|" << y << endl;
        r=R;
        g=G;
        b=B;
    }
};

teraz obie linijki w konsoli są identyczne ale dalej nie widzę na ekranie tego. jak dam dane ręcznie to działa....

0

droga miedzy tą klasą a kodem renderującym, jest chyba nieco dłuższa.

0

Dobra działa i jak zwykle błąd był we wczytywaniu danych... kazałem mu wczytać 0.1 i dzieliłem to przez 960 i jeszcze dziwiłem się czemu nie widać :)

1

W konstruktorach to:

Point();

nic nie robi. To nie spowoduje wywołania innego konstruktora, który ustawi Ci zmienne na zera. Abo musisz wszędzie ręcznie wszystko ustawiać albo użyć delegacji konstruktorów (C++11). Poza tym używaj listy inicjalizacyjnej.

Abstrahując od tego czy projekt jest dobry, w C++11 powinno to wyglądać tak:

class Point {
public:
    double x = 0.0;
    double y = 0.0;
    double r = 0.0;
    double g = 0.0;
    double b = 0.0;
 
    Point() = default;
 
    Point(double x_, double y_) :
      x(x_),
      y(y_) {
    }
 
    Point(double x_, double y_, double r_, double g_, double b_) :
      x(x_),
      y(y_),
      r(r_),
      g(g_),
      b(b_) {
    }
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1