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

SFML - lista inicjalizacyjna psuje okno aplikacji

Object Storage Arubacloud
0 głosów
252 wizyt
pytanie zadane 10 stycznia 2018 w C i C++ przez żółwibekon Początkujący (300 p.)

Cześć, postanowiłem wykorzystać w konstruktorze klasy Game listę inicjalizacyjną, ale po uruchomieniu okno nie wyświetla się poprawnie, w dodatku ma dziwną nazwę.

 

Game::Game()
:   windowSize(1280,860),
    //playableArea(400,400),
    //gameState(state_menu),
    windowTitle("test"),
    mainWindow(sf::VideoMode(windowSize.x, windowSize.y), windowTitle)
{

}

Po skompilowaniu: https://scr.hu/Ae0k07

Po przełączeniu na większy widok: https://scr.hu/2aYArp

 

W jaki sposób mogę to naprawić?

komentarz 10 stycznia 2018 przez draghan VIP (106,230 p.)
Więcej kodu poproszę - z tego nie da się wywnioskować powodu błędu.
komentarz 10 stycznia 2018 przez żółwibekon Początkujący (300 p.)
przeniesione 10 stycznia 2018 przez draghan

Skoro to konieczne, proszę:

Game.cpp http://codepad.org/h71h9g4Z

Game.hpp http://codepad.org/LVU3zpNo

main.cpp

#include "Game.hpp"

int main()
{
    Game game;
    game.run();
}

1 odpowiedź

+1 głos
odpowiedź 10 stycznia 2018 przez draghan VIP (106,230 p.)
wybrane 11 stycznia 2018 przez żółwibekon
 
Najlepsza

Obiekty składowe są inicjalizowane w C++ w kolejności ich deklaracji w deklaracji klasy ( ;) ). Rozwiązaniem problemu jest zmiana kolejności definiowania obiektów w klasie Game. Lista inicjalizacyjna w konstruktorze klasy powinna być zgodna z kolejnością deklaracji obiektów składowych klasy - kompilator powinien dać ostrzeżenie, jeśli kolejność jest zaburzona. Dla kompilatora z kolekcji GCC, opcja -Wall włącza większość ostrzeżeń, w tym i te wspomniane.

W tej chwili, w momencie tworzenia obiektu klasy Game, jako pierwszy obiekt wewnętrzny zostanie zainicjalizowana składowa mainWindow - zgodnie z kolejnością w deklaracji klasy (plik Game.hpp). W tym momencie nie istnieje jeszcze poprawnie zainicjalizowany obiekt windowSize ani windowTitle - one zostaną zainicjalizowane później - a "później" to za późno dla obiektu mainWindow.

Taka zmiana powoduje poprawne tworzenie obiektu okna:

#ifndef GAME_HPP_INCLUDED
#define GAME_HPP_INCLUDED

#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>

#include "enums.hpp"

class Game
{
    public:
        Game();
        void run();

    private:
        sf::Vector2u windowSize, playableArea;
        gamestate gameState;
        std::string windowTitle;
        sf::RenderWindow mainWindow;


        sf::Clock clock;
        sf::Time time;

        void init();
        void processEvents();
        void update();
        void render();
};
#endif // GAME_HPP_INCLUDED

 

komentarz 11 stycznia 2018 przez żółwibekon Początkujący (300 p.)
Nie wiem co powiedzieć, po prostu bardzo Ci dziękuje!
komentarz 11 stycznia 2018 przez draghan VIP (106,230 p.)
Na zdrowie, cieszę się że pomogłem. :)

Podobne pytania

0 głosów
3 odpowiedzi 445 wizyt
+2 głosów
2 odpowiedzi 540 wizyt
pytanie zadane 10 stycznia 2021 w C i C++ przez Mefjuu Nowicjusz (220 p.)
0 głosów
1 odpowiedź 460 wizyt
pytanie zadane 4 sierpnia 2020 w C i C++ przez NieMaJuzNazw Użytkownik (890 p.)

92,555 zapytań

141,403 odpowiedzi

319,553 komentarzy

61,939 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!

...