Sengi Temat założony przez niniejszego użytkownika |
Pobieranie zmiennej z klasy do main'a » 2014-11-06 22:17:20 Cześć! Jestem nowy na tym forum a to jest mój pierwszy post tutaj. Uczę się objektówki i piszę grę w Allegro 5. Po pewnym czasie napotkałem jeden problem: Gdy chcę pobrać do main'a wskaźnik ALLEGRO_BITMAP *bitmap, który jest w klasie Player do funkcji al_draw_bitmap pokazuję mi się błąd: error: expected primary-expression before 'Player' Wiem, że błąd banalny ale nie mogę sobie z nim poradzić ;) Wkleję tutaj kody źródłowe programu, powinny wszystko wyjaśnić: main.cpp #include <allegro5/allegro.h> #include <allegro5/allegro_primitives.h>
#include "procedury.h"
int main() { init_allegro(); ALLEGRO_DISPLAY * window = al_create_display( 800, 600 ); ALLEGRO_KEYBOARD_STATE kl; Player player( 100, 100, 100, 100, "player.bmp" ); while( !al_key_down( & kl, ALLEGRO_KEY_ESCAPE ) ) { al_get_keyboard_state( & kl ); al_draw_bitmap( ALLEGRO_BITMAP Player::bitmap, player.getX(), player.getY(), 0 ); al_clear_to_color( al_map_rgb( 100, 0, 0 ) ); al_flip_display(); } al_destroy_display( window ); return 0; }
procedury.h #include <allegro5/allegro.h>
#ifndef procedury_h #define procedury_h
void init_allegro();
class Player { float x, y; int health; int power; const char * path; public: static ALLEGRO_BITMAP * bitmap; Player( float = 0, float = 0, int = 100, int = 100, const char * = "null.bmp" ); float getX(); float getY(); int getHealth(); int getPower(); void setX( float x ); void setY( float y ); void setHealth( int health ); void setPower( int power ); };
#endif
procedury.cpp #include <allegro5/allegro.h> #include <allegro5/allegro_image.h> #include <allegro5/allegro_primitives.h>
#include "procedury.h"
void init_allegro() { al_init(); al_install_keyboard(); al_install_mouse(); al_init_image_addon(); al_init_primitives_addon(); }
Player::Player( float _x, float _y, int _health, int _power, const char * _path ) { x = _x; y = _y; health = _health; power = _power; path = _path; bitmap = al_load_bitmap( path ); }
Wklejam cały bo może problem leży w którymś z tych plików. Z góry bardzo dziękuje za pomoc. Sengi |
|
pekfos |
» 2014-11-07 14:24:58 ALLEGRO_BITMAP Player::bitmap
|
Po co tu nazwa typu? |
|
Sengi Temat założony przez niniejszego użytkownika |
» 2014-11-07 14:50:20 Ale gdy napiszę: al_draw_bitmap( Player::bitmap, player.getX(), player.getY(), 0 ); pokazuje mi błąd: procedury.cpp|25|error: prototype for 'int Player::getX()' does not match any in class 'Player' procedury.h|19|error: candidate is: float Player::getX() procedury.cpp|29|error: prototype for 'int Player::getY()' does not match any in class 'Player' procedury.h|20|error: candidate is: float Player::getY()
a tutaj plik procedury.cpp w którym jest problem: #include <allegro5/allegro.h> #include <allegro5/allegro_image.h> #include <allegro5/allegro_primitives.h>
#include "procedury.h"
void init_allegro() { al_init(); al_install_keyboard(); al_install_mouse(); al_init_image_addon(); al_init_primitives_addon(); }
Player::Player( float _x, float _y, int _health, int _power, const char * _path ) { x = _x; y = _y; health = _health; power = _power; path = _path; bitmap = al_load_bitmap( path ); }
int Player::getX() { return x; }
int Player::getY() { return y; }
int Player::getHealth() { return health; }
int Player::getPower() { return power; }
void Player::setX( float __x ) { Player::x = __x; }
void Player::setY( float __y ) { Player::y = __y; }
void Player::setHealth( int __health ) { Player::health = __health; }
void Player::setPower( int __power ) { Player::power = __power; }
|
|
pekfos |
» 2014-11-07 15:00:09 Co niejasnego w komunikatach błędów? Mówią jasno i wyraźnie, że nie możesz zdefiniować int Player::getX(), bo w klasie masz float Player::getX().. Z tego kodu poleci pewnie jeszcze, co najmniej, jeden błąd. Przychodź z faktycznymi problemami, zamiast zadawać po prostu głupie pytania. |
|
Sengi Temat założony przez niniejszego użytkownika |
» 2014-11-07 15:15:36 Sorki ale po prostu dałem stary kod ;D Faktyczny błąd to: In function `main' main.cpp|17|undefined reference to `Player::bitmap'| In function `ZN6PlayerC2EffiiPKc': procedury.cpp|22|undefined reference to `Player::bitmap| ||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 2 second(s)) ===|
który pokazuję się przy linijce: al_draw_bitmap( Player::bitmap, player.getX(), player.getY(), 0 ); |
|
Monika90 |
» 2014-11-07 15:52:29 |
|
Sengi Temat założony przez niniejszego użytkownika |
» 2014-11-07 16:09:28 Tak o to mi właśnie chodziło! Wielkie dzięki Monika90. Zamykam temat.
|
|
« 1 » |