Partage
  • Partager sur Facebook
  • Partager sur Twitter

Window* GetWindow();

SFML

Sujet résolu
    25 septembre 2022 à 19:33:43

    Bonjour,

    Je suis débutant en programmation (~environ 2mois de c++)

    Je lis actuellement un livre sur le développement de jeu video avec la SFML.

    Je suis confronté a un problème.

    ce qui est étrange c'est que le code fonctionne avec CodeBlocks mais pas avec Visual Studio.

    l'erreur que me retourne Visual Studio, c'est que Game::GetWindow doit retourner une valeur. Pourtant sur CodeBlocks je l'ai defini de la même manière et ça marche :p

    Main.cpp

    #include <SFML/Graphics.hpp>
    #include "Game.h"
    
    using namespace sf;
    
    int main()
    {
            Game game;
            
            while (!game.GetWindow()->IsDone()) 
            {
                
            }
            return 0;
    }
    Game.h
    #include "Window.h"
    
    class Game 
    {
    public:
    	Window* GetWindow();
    
    private:
    	Window m_window;
    
    );

    Game.cpp

    #include "Game.h"
    
    Window* Game::GetWindow() {}

    Window.h

    #include <string>
    #include <SFML/Graphics.hpp>
    
    
    class Window 
    {
    public:
    	Window();
    	Window(const std::string& l_title, const sf::Vector2u& l_size);
    
    	void Update();
    
    	bool IsDone();
    	
    private:
    	void Setup(const std::string& l_title, const sf::Vector2u& l_size);
    
    	bool m_isDone;
    };

    Window.cpp

    #include "Window.h"
    
    Window::Window() 
    {
    	Setup("Window", sf::Vector2u(640, 480));
    }
    
    Window::Window(const std::string& l_title, const sf::Vector2u& l_size)
    {
    	Setup(l_title, l_size);
    }
    
    void Window::Update()
    {
    	sf::Event event;
    	while (m_window.pollEvent(event))
    	{
    		if (event.type == sf::Event::Closed)
    		{
    			m_isDone = true;
    		}
    		else if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::F5)
    		{
    			ToggleFullscreen();
    		}
    	}
    }
    
    bool Window::IsDone()
    {
    	return m_isDone;
    }
    
    void Window::Setup(const std::string& l_title, const sf::Vector2u& l_size)
    {
    	m_windowTitle = l_title;
    	m_windowSize = l_size;
    	m_isFullscreen = false;
    	m_isDone = false;
    	Create();
    }
    

    J'ai volontairement réduit le code pour pas que ça ressemble à un pavé.

    En faite, je sais pas quoi retourner. Ce que je comprend c'est que c'est un pointeur de type Window qui a pour nom GetWindow. Il devrait accéder a l'attributs de Window m_isDone pour savoir si la réponse est true ou false, afin de continuer ou fermer la boucle.

    Quelqu'un peut-il m'aider ?

    tout conseils sont les bienvenus =)

    Merci et salutation !







    • Partager sur Facebook
    • Partager sur Twitter
      26 septembre 2022 à 0:17:48

      Salut,

      Ce qui se passe sans doute, c'est que tu n'as pas activé les avertissements, car, sur ce coup, c'est visual studio qui a raison:  A partir du moment où tu indique qu'une fonction est censée renvoyer une valeur, ben, il n'y a rien à faire, il faut que tous les chemins d'exécution mènent effectivement ... au renvoi d'une valeur du type indiqué (un pointeur sur un objet de type Window, en l'occurrence)

      Maintenant, il est particulièrement étonnant que ton compilateur ne te donne pas au minimum un avertissement sur ce point, car c'est typiquement le genre d'avertissement que Gcc a activé depuis longtemps.  Peut-être utilises tu -- tout simplement -- une version trop ancienne de Gcc (ou de MinGW, vu que tu as l'air d'être sous windows)?

      Ou peut-être n'as tu simplement pas fait attention aux différents avertissement sous code::blocks?

      Par contre, il y a de sérieux problèmes de "const correctness" dans ton code, dans le sens où toutes les fonctions qui ne modifient clairement pas l'état de tes classes -- les accesseur (getters) en grosse priorité -- devraient s'engager à effectivement ne pas modifier l'état de la classe, et qu'elles devraient dés lors être déclarées constantes.

      • Partager sur Facebook
      • Partager sur Twitter
      Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
        26 septembre 2022 à 12:12:45

        MinGW émet un warning : warning: no return statement in function returning non-void [-Wreturn-type]| 

        et même sur une des plus vielle version de minGW (2000): warning: control reaches end of non-void function `Game::GetWindow()'|

        • Partager sur Facebook
        • Partager sur Twitter
        ...
          26 septembre 2022 à 13:09:11

          Au pif:

          Window* Game::GetWindow() { return &m_window;}



          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            26 septembre 2022 à 16:34:37

            Je vous remercie d'avoir pris le temps de me répondre :)

            J'ai été regarder sur CodeBlocks et il y belle est bien un avertissement (celui de rouloude). En faite je suis passé outre l'avertissement, et le code fonctionne même sans préciser le return. (la fenetre s'ouvre et mes images s'animent)

            J'ai pris note des "const correctness" et je vais tâcher d'être plus rigoureux de ce côté là.

            Window* Game::GetWindow() { return &m_window;} fonctione ;P

            Vous étes trop fort !!!










            • Partager sur Facebook
            • Partager sur Twitter

            Window* GetWindow();

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown