Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pobieranie zmiennej z klasy do main'a

Ostatnio zmodyfikowano 2014-11-07 16:09
Autor Wiadomość
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
C/C++
#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 ); //tu jest bład
        al_clear_to_color( al_map_rgb( 100, 0, 0 ) );
        al_flip_display();
    }
    al_destroy_display( window );
    return 0;
}

procedury.h
C/C++
#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" );
   
    // getters
    float getX();
    float getY();
    int getHealth();
    int getPower();
   
    //setters
    void setX( float x );
    void setY( float y );
    void setHealth( int health );
    void setPower( int power );
};

#endif // procedury_h

procedury.cpp
C/C++
#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
P-120103
pekfos
» 2014-11-07 14:24:58
C/C++
ALLEGRO_BITMAP Player::bitmap
Po co tu nazwa typu?
P-120123
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:
C/C++
#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() { //tu pokazuje bład
    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;
}
P-120130
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.
P-120132
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 );
P-120133
Monika90
» 2014-11-07 15:52:29
P-120134
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.
P-120135
« 1 »
  Strona 1 z 1