• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Używanie obiektu klasy w innej klasie

Object Storage Arubacloud
0 głosów
1,034 wizyt
pytanie zadane 31 lipca 2016 w C i C++ przez Pac Plus Mądrala (5,560 p.)
zamknięte 5 sierpnia 2016 przez draghan

Witam! Zacząłem niedawno przepisywać kod gry RPG którą napisałem pare lat temu. Więc zabrałem się za oddzielania struktur jak animacja, ruch itp. z głównego objektu gry. Problem pojewił się przy próbie dodania pozycji z klasy 'Position' do 'GameObject' gdzie dostaje komunikat , że 'p' czyli objekt klasy 'Position' nie jest typem. Powinienem użyć konstruktora klasy 'GameObject' do nadania wartości objektowi 'p' i tak zrobiłem. Klasa 'Position jest bardzo prosta i ma poprostu odzielić wszystkie funkcje i zmienne związane z pozycją od głównego objektu gry.

class GameObject;

class Position{
    float x, y;
    friend GameObject;
public:
    Position(): x(0), y(0) {}
    Position(float a, float b): x(a), y(b) {}
    float GetX() { return x; }
    float GetY() { return y; }
};

W sekcji protected w 'GameObject' deklaruje objekt powyższej klasy.

class GameObject{
[...]

protected:
    Position p;
[...]

A potem próbuje go użyć w sekcji public.

public:
    GameObject(): alive(true), collidable(0), p(0.0, 0.0), bound_x(0), bound_y(0),
    max_frame(0), frame_x(0), frame_y(0), frame_count(0), frame_delay(0),
    frame_width(0), frame_height(0), animation_columns(0), animation_row(0),
    animation_direction(0), image(nullptr), alphac( al_map_rgb(255,0,255))
    {}

    virtual void Init( p.x, p.y, motion.vel.x, motion.vel.y,
                 int dir_x, int dir_y, int bound_x, int bound_y );
[...]

Komunikt Gcc:

||=== Build: Debug in EtlanKingdom (compiler: GNU GCC Compiler) ===|
/home/siery/Documents/Project/EtlanKingdom/precompiled/game_object.h|50|error: ‘p’ is not a type|
/home/siery/Documents/Project/EtlanKingdom/precompiled/game_object.h|50|error: expected ‘,’ or ‘...’ before ‘.’ token|

Dziękuję za pomoc!

komentarz zamknięcia: Otrzymano rozwiązanie w komentarzu.
komentarz 31 lipca 2016 przez obl Maniak (51,280 p.)

Czy deklaracje klas GameObject oraz Position znajdują się w jednym pliku nagłówkowym, czy w oddzielnych plikach?

komentarz 31 lipca 2016 przez Pac Plus Mądrala (5,560 p.)
Obie klasy znajdują się w jednym pliku.
komentarz 31 lipca 2016 przez obl Maniak (51,280 p.)

Tutaj masz błąd:

virtual void Init( p.x, p.y, motion.vel.x, motion.vel.y,
                 int dir_x, int dir_y, int bound_x, int bound_y );

powinno być:

virtual void Init(float x, float y, float motion_vel_x,float motion_vel_y,
                 int dir_x, int dir_y, int bound_x, int bound_y );

Nie podałeś typu danych, jakie ma przyjmować funkcja i nazwa zmiennej nie może zawierać operatora kropki. Albo przekazujesz obiekt do funkcji albo zmienną typu prostego albo jakąś strukturę.

komentarz 31 lipca 2016 przez Pac Plus Mądrala (5,560 p.)
Dzięki. Myślałem, że moge podać tam konkretny objekt. Oszczędziłeś mi dużo frustracji na przyszłość :).
komentarz 31 lipca 2016 przez obl Maniak (51,280 p.)

Możesz podać, ale w inny sposób, np tak:

virtual void Init(const Position &pos, float motion_vel_x,float motion_vel_y,
                 int dir_x, int dir_y, int bound_x, int bound_y );

Ja po prostu nie wiedziałem jaką klasę chcesz tam przekazać (tak samo jak kompilator).

Podobne pytania

0 głosów
1 odpowiedź 1,051 wizyt
0 głosów
1 odpowiedź 449 wizyt
pytanie zadane 25 stycznia 2017 w C i C++ przez robertwe Gaduła (4,620 p.)
0 głosów
2 odpowiedzi 1,857 wizyt
pytanie zadane 18 października 2016 w C i C++ przez sh1nen Obywatel (1,570 p.)

92,551 zapytań

141,399 odpowiedzi

319,529 komentarzy

61,937 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...