Partage
  • Partager sur Facebook
  • Partager sur Twitter

SFML - probleme de creation de fonctions

Fin de la trilogie de mes problemes avec SFML ^^

Sujet résolu
Anonyme
    28 avril 2015 à 14:35:36

    Bonjour,

    J'ai commencé récemment la SFML et je fais actuellement un programme plutôt gros, je me suis donc dit que j'allais créer des fonctions dans des fichiers .cpp a part pour rendre le code plus propre. Seulement voila: le compilateur m'annonce que "maFenetre" (rassurez vous j'ai pas vraiment pris un nom aussi pourri :D) was not declared in this scope... J'ai éssayé de rajouter des arguments dans la fonction (du genre "sf::RenderWindow" ou tout ce qui y ressemble...) mais ça marche pas, et quand ca semble marcher ca m'ouvre un fichier NonCopyable.cpp avec une erreur "sf::NonCopyable::NonCopyable(const sf::NonCopyable&) is private"

    Du coup la seule solution que je vois serais de mettre tout mon code dans le main.cpp mais franchement ça ne me tente pas du tout, alors si vous pouviez m'aider j'apprecirais...

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      28 avril 2015 à 15:24:35

      1. Montre ton code.

      2. La POO est sûrement plus adaptée pour la SFML (mais là tu fais comme tu veux).

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        28 avril 2015 à 15:34:38

        //menuPrincipal.cpp
        
        #include <SFML/encore des machins!>
        #include "menu.h"
        
        void fonctionMenuPrincipal( sf::RenderWindow )
        {
           while ( sequenceProgramme == 1 )
           {
              /*
                mon code ou j'affiche des sprites sur maFenetre
              */
           }
        }
         
        //main.cpp #include <SFML/trucs et machins> main() { RenderWindow maFenetre; maFenetre.create( VideoMode(800, 450), "Titre" ); /* code... */ if( sequenceProgramme == 1 ) { fonctionMenuPrincipal( maFenetre ); } /* encore du code */ }
        //menu.h
        #ifndef MENU_H_INCLUDED
        #define MENU_H_INCLUDED
        
        void fonctionMenuPrincipal( sf::RenderWindow );
        
        #endif // MENU_H_INCLUDED
        


        • Partager sur Facebook
        • Partager sur Twitter
          28 avril 2015 à 15:39:56

          Le paramètre de fonctionMenuPrincipal doit avoir un nom, et ne doit pas copier la RenderWindow, mais y faire référence :

          void fonctionMenuPrincipal( const sf::RenderWindow &fenetre );


          Puis, dans ton main, il te faut un objet de ta classe pour appeler fonctionMenuPrincipal . Ou alors tu déclares ta fonction statique si tu n'as pas besoin d'objet.

          • Partager sur Facebook
          • Partager sur Twitter
            28 avril 2015 à 15:44:33

            Quand tu veux passer un paramètre à une fonction, c'est toujours dans le style TYPE nom... Autrement dit :

            void foo(int /*type*/ test /*nom*/)
            {
                std::cout<<test<<std::endl;
            }


            Ps : Ce message signifie "regarde ton code, tu respecte pas la règle"...

            Edit : Grillé

            -
            Edité par charlesfire 28 avril 2015 à 15:44:47

            • Partager sur Facebook
            • Partager sur Twitter
            L'être humain, contrairement aux geeks qui ne sont de toute façon pas des êtres humains, est un animal social taillé pour vivre en "meute".
            Anonyme
              28 avril 2015 à 15:48:32

              Bon, ca me fait plus l'erreur au meme endroit (c'est deja ca de gagné) mais maintenant dans le main ca m'affiche l'erreur au niveau de

              fonctionMenuPrincipal( &maFenetre );
              /*
                Je suis sur que je me suis trompé ici
                J'ai essayé avec const mais ca marche pas non plus
              */





              • Partager sur Facebook
              • Partager sur Twitter
                28 avril 2015 à 17:45:04

                Pourquoi passer l'adresse de maFenetre en paramètre ? Tu n'utilises pas de pointeurs à ce que je sache. :-°

                Si tu as des erreurs, copie-les ici, on saura plus vite d'où vient le problème.

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  28 avril 2015 à 18:02:31

                  Quand je met juste maFenetre en argument ca me fait "error: passing 'const sf::RenderWindow' as 'this' argument of 'bool sf::Window::pollEvent(sf::Event&)' discards qalifiers [-fpermissive]"

                  //Code simplifié de menuPrincipal.cpp
                  
                  void fonctionMenuPrincipal( const sf::RenderWindow &maFenetre )
                  {
                      while ( sequenceProgramme == 1 )
                      {
                          sf::Event event;
                  
                          while ( maFenetre.pollEvent( event ) )
                          {
                              if ( event.type == sf::Event::Closed )
                              {
                                  sequenceProgramme = 0;
                                  maFenetre.close();
                              }
                          }
                       /*
                         Oh... Des sprites!
                       */
                       }
                  }
                  
                  /*--------------------------*/
                  
                  //Et au cas ou, dans menu.h
                  void fonctionMenuPrincipal( const sf::RenderWindow &maFenetre ); //J'ai des doutes sur cette ligne



                  -
                  Edité par Anonyme 28 avril 2015 à 18:55:57

                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 avril 2015 à 18:55:03

                    La fonction poolEvent n'est pas constante.
                    Tu passe ta sf::Renderwindow en référence constante, ça coince un peut entre les 2.

                    • Partager sur Facebook
                    • Partager sur Twitter
                    "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein
                    Anonyme
                      28 avril 2015 à 19:02:05

                      Mais je fais quoi alors...
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        28 avril 2015 à 19:25:57

                        Bon, j'ai enlevé les const et laissé les & et tout... Ca marche, je sais absolument pas pourquoi mais ca marche c'est ce qui compte
                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 avril 2015 à 19:38:40

                          Ah oui effectivement, il fallait savoir ce que fonctionMenuPrincipal faisait avec la fenêtre. Quand tu fais une référence vers objet constant (const T&), on ne peut pas utiliser les méthodes de l'objet référencé qui ne sont pas constantes.

                          En l’occurrence, comme tu récupères l'événement de la fenêtre et que tu la ferme (pollEvent() et close() sont des méthodes non constantes), il faut que la référence ne soit pas vers un objet constant, donc ne pas mettre les const était bien la solution.

                          (Enfin, tout ça devrait être acquis pour quelqu'un qui se classe 2/3 en C++. ^^ Décidément, ce système de compétence est plutôt inutile.)

                          -
                          Edité par Olybri 28 avril 2015 à 19:39:18

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            28 avril 2015 à 19:49:55

                            Mouais j'y avais pas pensé... Enfin bon, je crois que j'ai compris l'erreur et c'est tres bien comme ca

                            (et si je me suis classé 2 en C++ c'est parce que j'ai encore des problemes par-ci par-la, ce forum en est la preuve^^)

                            • Partager sur Facebook
                            • Partager sur Twitter
                              28 avril 2015 à 19:57:50

                              Tu fais même pas de l'objet, t'es clairement pas à 2/3, ni même à 1/3...
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                28 avril 2015 à 20:04:14

                                C'est que le menu principal...

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  28 avril 2015 à 20:07:31

                                  TheMillsialix a écrit:

                                  C'est que le menu principal...


                                  Justement, ça laisse à craindre pour le reste... Quoi qu'il en sois, même moi (qui fait de la programmation objet en c++ depuis bientôt 4 ans) je ne me considère pas à 2/3 en c++...

                                  -
                                  Edité par charlesfire 28 avril 2015 à 20:08:02

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  L'être humain, contrairement aux geeks qui ne sont de toute façon pas des êtres humains, est un animal social taillé pour vivre en "meute".
                                    28 avril 2015 à 20:11:50

                                    Je veux pas m'éterniser là-dessus, mais quand tu dis "des problemes par-ci par-la" et que tu ne mets même pas de noms à tes paramètres, que tu ne connais pas le principe des références vers constantes et que tu appelles des méthodes non-statiques sans objets, j'imagine qu'il reste pas mal de problèmes. ^^

                                    A mon avis, pour être 2/3 il faudrait au moins connaître parfaitement la syntaxe, ainsi qu'une grande partie de la STL, et être compétent en conception. Y a pas de "règles" pour ce système de classement, mais disons c'est ce que je pourrais m'attendre chez quelqu'un qui se classe ainsi.

                                    Mais bon, j'y suis aussi "passé" par là (je pensais que je connaissais suffisamment pour coder un peu tout et n'importe quoi), mais quand j'ai commencé de plus gros projet, j'ai vite compris que je ne connaissait que très peu de chose, et que le C++ ça s'apprend pas en peu de temps. ;)

                                    -
                                    Edité par Olybri 28 avril 2015 à 20:12:49

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      28 avril 2015 à 20:13:51

                                      Oui bon c'est pas grave au fond c'est pas un concours, on est pas la pour discuter de qui est doué en c++ ou qui ne l'est pas, chaqu'un a son avis sur la question... Enfin bon, sujet resolu
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      SFML - probleme de creation de fonctions

                                      × 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