[SFML, C++] Problem z wskaźnikiem ?
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

[SFML, C++] Problem z wskaźnikiem ?

AutorWiadomość
Temat założony przez niniejszego użytkownika
[SFML, C++] Problem z wskaźnikiem ?
» 2018-05-01 22:51:37
Witam, ktoś jest w stanie mi wyjaśnić dlaczego poniższy kod sprawia, że program się kompuluje, ale zacina i wypluwa wyjątek? Domyślam się, że coś schrzaniłem z wskaźnikami.
Załączam tylko te kawałki które coś wnoszą do tego problemu.

C/C++
//Car.cpp (funckja bazowa)

class Car
    : public sf::Sprite
{
protected:
    sf::Texture * texture;
    sf::Sprite * sprite;
}

//CRed.cpp (dziedicząca z Car.cpp), nagłówkowego nie załączam, bo nie potrzeby

CRed::CRed( std::string filename, float x, float y )
{
    texture->loadFromFile( filename );
    sprite->setTexture( * texture );
    sprite->setPosition( x, y );
}

//main.cpp

Car * red = new CRed( "B_car_red.png", 50, 50 );
window.draw( * red );
P-170899
Temat założony przez niniejszego użytkownika
» 2018-05-01 22:59:36
Na dobra sprawę nie jestem pewien, czy te wskaźniki sąw tym przypadku w ogóle potrzebne, bo tak naprawdę ten wszsytko to robię w konstruktorze i potem chyba już nie potrzebuję tych wartości, ale po zmianie kodu na "bezwskaźnikowy"

C/C++
CRed::CRed( std::string filename, float x, float y )
{
    texture.loadFromFile( filename );
    sprite.setTexture( texture );
    sprite.setPosition( x, y );
    // i w Car.cpp też bez wskaźników
}

już nie ma wyjątków ani nic, ale nie pokazuje mi się objekt tak jakby gdziś zaginął w pamięci.
P-170900
» 2018-05-01 22:59:50
Zaalokowałeś pamięć na te sprajty i tekstury?
P-170901
» 2018-05-01 23:00:03
C/C++
texture->loadFromFile( filename );
sprite->setTexture( * texture );
sprite->setPosition( x, y );
Dlaczego w konstruktorze używasz wskaźników wskazujących na przypadkowe adresy? Bo skoro nie przypisujesz im nigdzie żadnej wartości, to wskazują gdziekolwiek, czyli zachowanie jest niezdefiniowane.
P-170902
» 2018-05-01 23:02:58
C/C++
Car * red = new CRed( "B_car_red.png", 50, 50 );
window.draw( * red );
Bo tak tego nie wyświetlisz. Niby dlaczego miałoby to wyświetlić tego sprajta, którego sobie zdefiniowałeś w klasie?
P-170903
Temat założony przez niniejszego użytkownika
» 2018-05-01 23:09:56
Pekfos, mógłbyś wyjaśnić ostatnią wiadomość? Dlaczego nie powinna wyświetlić ?
P-170904
» 2018-05-01 23:17:52
Twoja klasa ma sprajta i jest sprajtem. Ty ustawiasz własności tego pierwszego, a wyświetlane jest to drugie. Kłaniają się podstawy programowania obiektowego. Albo wywal niepotrzebnego składowego sprajta, albo dziedzicz po sf::Drawable i zdefiniuj operację rysowania, by rysowała składowego sprajta.

Dlaczego nie powinna wyświetlić ?
To nie powinno wymagać żadnych wyjaśnień. Masz sprajta, sprajt ma nazwę. Nazwa nie jest nigdzie użyta do wyświetlenia go. Dlaczego niby miałoby się wyświetlić? Samo to się komputer wyłącza, jak za prąd nie zapłacisz.
P-170905
Temat założony przez niniejszego użytkownika
» 2018-05-01 23:27:17
Dzięki, rzeczywiście :/ Zaraz postaram się coś z tym zrobić.
P-170906
« 1 »
 Strona 1 z 1