Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur compilation sous code blocks

Erreur irrésolvable, obscure et unique lors de compilation d'un projet

Sujet résolu
    29 janvier 2015 à 0:53:25

    Salut,

    je viens pour un problème de compilation... ou de compilateur, sous code blocks.

      Attention, celui qui résoudra mon problème sera réellement un DIEU, un ninja, un Warrior !!!!!   :p

    Car ce problème ne concerne visiblement que moi, et mon pc (windows 7 64 bits).

    J'ai suivi le cours de c++ et j'en suis à la création d'objets, avec le fameux projet david contre goliath, où on crée la classe personnage.

    mon projet appelé projetbase.cbp  contient 3 fichiers :

    le main.cpp :

    #include <iostream>
    #include "Personnage.h" //Ne pas oublier
    using namespace std;
    int main()
    {
        Personnage david, goliath;
        //Création de 2 objets de type Personnage : david et goliath
        goliath.attaquer(david); //goliath attaque david
        david.boirePotionDeVie(20); //david récupère 20 de vie en buvant une potion
        goliath.attaquer(david); //goliath réattaque david
        david.attaquer(goliath); //david contre-attaque... c'est assez clair non ? 
        goliath.changerArme("Double hache tranchante vénéneuse de la mort", 40);
        goliath.attaquer(david);
        return 0;
    }
    

    Le fichier personnage.cpp :

    #include "Personnage.h"
    using namespace std;
    
    void Personnage::recevoirDegats(int nbDegats)
    {
    m_vie -= nbDegats;
        //On enlève le nombre de dégâts reçus à la vie du personnage
        
        if (m_vie < 0) //Pour éviter d'avoir une vie négative
        {
            m_vie = 0; //On met la vie à 0 (cela veut dire mort)
        }
    }
    
    void Personnage::attaquer(Personnage &cible)
    {
        cible.recevoirDegats(m_degatsArme);
        //On inflige à la cible les dégâts que cause notre arme
    }
    
    void Personnage::boirePotionDeVie(int quantitePotion)
    {
        m_vie += quantitePotion;
        if (m_vie > 100) //Interdiction de dépasser 100 de vie
        {
            m_vie = 100;
        }
    }
    
    void Personnage::changerArme(string nomNouvelleArme, int degatsNouvelleArme)
    {
        m_nomArme = nomNouvelleArme;
        m_degatsArme = degatsNouvelleArme;
    }
    
    bool Personnage::estVivant()
    {
        if (m_vie > 0) //Plus de 0 de vie ?
        {
            return true; //VRAI, il est vivant !
        }
        else
        {
            return false; //FAUX, il n'est plus vivant !
        }
    }

    un fichier personnage.h :

    #ifndef DEF_PERSONNAGE
    #define DEF_PERSONNAGE
    #include <string>
    class Personnage
    {
        public:
        void recevoirDegats(int nbDegats);
        void attaquer(Personnage &cible);
        void boirePotionDeVie(int quantitePotion);
        void changerArme(std::string nomNouvelleArme, int degatsNouvelleArme);
        bool estVivant();
        private:
        int m_vie;
        int m_mana;
        std::string m_nomArme; //Pas de using namespace std,
        int m_degatsArme;
    };
    #endif

    L'arborescence du projet :

    projetbase.cbp

          Sources:    --> main.cpp

                            --> personnage.cpp

         Headers:    --> personnage.h



    Mon projet, mes fichiers.cpp et .h sont dans un dossier appelé projetbase, et il s'est créé un fichier bin et un fichier obj dans le dossier.

    Vous me direz peut-être que jusque là tout va bien j'ai suivi le cours mon programme est bon (bin oui c'est le copié collé du cours ^^).

    Certains pourraient dire : << Vas y mon petit compile moi ce projet et passe à la suite tu n'es qu'au début de la POO !! >>

    OK, alors je compile, c'est parti...

    Voila ce que me dit ce bon compilateur quand je compile !!!!:colere:


    C:\Users\...\programmation\C++ 2015\programme 1\projetbase\main.cpp|1|error: #include expects "FILENAME" or <FILENAME>|

    C:\Users\...\programmation\C++ 2015\programme 1\projetbase\main.cpp|2|error: #include expects "FILENAME" or <FILENAME>|

    C:\Users\...\programmation\C++ 2015\programme 1\projetbase\main.cpp|3|error: stray '\240' in program|

    C:\Users\...\programmation\C++ 2015\programme 1\projetbase\main.cpp|3|error: stray '\240' in program|

                                                                    ...

    Et ce ne sont que les premières lignes d'erreur il y en a environs 50 autres comme la quatrième jusqu'à ce que le compilateur s'arrête car trop d'erreurs.

    La mon compilateur est vraiment pas content il me dit à la fin (je répète texto ce qu'il a dit désolé pour l'obscénité...) :

                                      ||More errors follow but not being shown.|

                                     ||Edit the max errors limit in compiler options...|

                                     ||=== Build failed: 50 error(s), 0 warning(s) (0 minute(s), 2 second(s)) ===|

    Alors moi je me dis que je suis mal pour continuer dans cette voie si personne n'a jamais rencontré ce pb ou si personne a de réponse.


    J'utilise GNU GCC compiler et code blocks sur Windows 7 en 64 bits.

    Si c'est un problème de compilateur, merci de m'aiguiller sur les solutions ( car je peus bidouiller dans settings-->compiler mais je comprends rien et je risque d'apporter plus de casse encore).

    Celui qui me permettra d’exécuter ce code aura tout mon respect et sera mon nouveau maître en informatique (il se peut aussi qu'il sauve mon pc d'une chute intentionnelle! lol )

       Vous l'aurez compris, je cherche Un Jedi ce soir, qui me permettra de passer des nuits blanches de programmation c++, comme je l'ai fait avec mon module Arduino UNO il y a un an.

    Merci pour votre aide   




    • Partager sur Facebook
    • Partager sur Twitter
      29 janvier 2015 à 1:08:31

      Ah oui, j'ai aussi les deux lignes de la fin en message d'erreur :

      C:\Users\...\programmation\C++ 2015\programme 1\projetbase\main.cpp||In function 'int main()':|
      C:\Users\...\programmation\C++ 2015\programme 1\projetbase\main.cpp|6|error: 'Personnage' was not declared in this scope|
       
                                       ||More errors follow but not being shown.|
                                       ||Edit the max errors limit in compiler options...|
                                       ||=== Build failed: 50 error(s), 0 warning(s) (0 minute(s), 2 second(s)) ===|

      Est-ce que je dois enregistrer mon fichier personnage.h dans un autre dossier que celui de mon projet ?

      Je vous avoue que je serre un peu sur ce pb depuis plusieurs semaines et je vois aucune réponse sur les forums.

      -
      Edité par Filoul3 29 janvier 2015 à 1:09:34

      • Partager sur Facebook
      • Partager sur Twitter
        29 janvier 2015 à 9:39:45

        C:\Users\...\programmation\C++ 2015\programme 1\projetbase\main.cpp|3|error: stray '\240' in program|


        Tu as des caractères pourris dans tes fichiers sources, probablement un problème d'encodage des fichiers sources, essaye de les ouvrir avec un editeur de texte bien foutu genre notepad++, change l'encodage en utf-8 (sans BOM) sauvegarde et essaye de compiler.

        • Partager sur Facebook
        • Partager sur Twitter
        Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
          29 janvier 2015 à 12:56:41

          Merci int21h mais j'ai pas bien compris ton conseil...

          Il faudrait que je change le nom de mes dossiers (du style c++2015) qui contiennent mon projet?

          • Partager sur Facebook
          • Partager sur Twitter
            29 janvier 2015 à 21:28:33

            Comment arrives-tu à "il faut changer le nom" ?

            Tes sources contiennent des caractères invisibles (espaces insécable ?). Il faut les supprimer.

            -
            Edité par jo_link_noir 30 janvier 2015 à 15:33:19

            • Partager sur Facebook
            • Partager sur Twitter
              30 janvier 2015 à 1:24:25

              OK, donc si j'ai bien compris, je dois mettre mon projet et mes sources dans un dossier qui ne possède pas d'espaces dans son nom ?

              Si c'est ça, je viens de tester avec le dossier de mon projet directement sous le disque C.

              Mais j'obtiens toujours cette erreur :

              C:\projetbase\Personnage.cpp|2|error: #include expects "FILENAME" or <FILENAME>|

              avec toutes les erreurs suivantes que j'ai décris dans le premier post.

              Mon code est celui qui vient du cours de c++ donc le problème ne vient pas du code non plus.

              • Partager sur Facebook
              • Partager sur Twitter
                30 janvier 2015 à 3:28:33

                Dans ton code (a l’intérieur du fichier) tu a sans doute un ou plusieurs caractères invisibles (sans doute liée a un copier/coller foireux depuis le net)... C'est eux que tu dois supprimer
                • Partager sur Facebook
                • Partager sur Twitter
                  30 janvier 2015 à 8:34:24

                  Quand tu édites avec NotePad, la première chose à faire est de vérifier si la coloration utiliséee des caractères correspond au langage utilisée. De deux, il faut aussi voir si l'encodage correspond à UTF-8 sans BOM, sans quoi tu auras des caractères soit invisibles, soit ceux que tu utiliseras ne sont pas reconnus / compilés correctement, et de nombreuses erreurs surviennent comme ça.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 janvier 2015 à 11:52:13

                    mais non c'est tres simple quand tu as installer code blocks tu l'as telecharger sur un site sans mingw essaye sur un autre site et regarde bien que tu as bien installer la derniere version mingw

                    bonne chance

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Avixi
                      30 janvier 2015 à 14:48:02

                      http://www.codeblocks.org/downloads/binaries  

                      " Si vous êtes sous Windows, repérez la section « Windows » un peu plus bas sur cette page. Téléchargez le logiciel en choisissant le programme dont le nom contient mingw (ex. : codeblocks-10.05mingw-setup.exe). L'autre version étant sans compilateur, vous aurez du mal à compiler vos programmes.  "

                      Extrait du cours C++ d'OpenClassrooms

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Tout est possible tant qu'on y croit. 

                        30 janvier 2015 à 15:27:50

                        Arkas a écrit:

                        http://www.codeblocks.org/downloads/binaries  

                        " Si vous êtes sous Windows, repérez la section « Windows » un peu plus bas sur cette page. Téléchargez le logiciel en choisissant le programme dont le nom contient mingw (ex. : codeblocks-10.05mingw-setup.exe). L'autre version étant sans compilateur, vous aurez du mal à compiler vos programmes.  "

                        Extrait du cours C++ d'OpenClassrooms

                        avinoamsebbah1 a écrit:

                        mais non c'est tres simple quand tu as installer code blocks tu l'as telecharger sur un site sans mingw essaye sur un autre site et regarde bien que tu as bien installer la derniere version mingw

                        bonne chance

                        Pouvez-vous m'expliquer tous les deux ce qui vous amène à donner ce genre de conseils ? Désolé, mais c'est complètement à côté de la plaque. Comme le dit int21h, c'est sans aucun doute un caractère invisible dans le fichier.

                        -
                        Edité par Jmgr 30 janvier 2015 à 15:29:20

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Développeur d'Actiona, logiciel d'automatisation de tâches : actiona.tools - Site Web : jmgr.net
                          31 janvier 2015 à 11:02:14

                          Par ce que dans son autre sujet qui porte le même nom il dit cela :

                          " Apparemment lors de la compilation, c'est comme si mon fichier personnage.h n'était pas trouvé, donc chaque variable et chaque fonction n'étant pas déclarée il me met un message d'erreur.

                          Pour plus d'infos je suis sous windows7 64bits, j'ai ré-installé plusieurs fois code blocks mais le résultat est le même.

                          J'ai fais installation standard.

                          Est ce que je dois paramétrer quelque chose ( compilateur? ) ou ajouter des plugins ou autre ???   "

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Tout est possible tant qu'on y croit. 

                            31 janvier 2015 à 12:01:38

                            Il faut lire les messages d'erreur, pas imaginer des plans sur la comète! Le message dit que la syntaxe de l'include est incorrecte, pas qu'il n'a pas trouvé le fichier include, ni que le compilateur est absent ou je ne sais quoi encore! Les messages suivants indiquent que le compilateur est tombé sur des caractères qu'il ne comprend pas, donc ça veut dire que le fichier source est probablement mal encodé, probablement comme l'a dit Elried à cause d'un copier/coller foireux.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
                              1 février 2015 à 3:53:24

                              Bonjour, et merci pour vos premières réponses.

                              int21h tu avais l'air sûr de toi, alors j'ai bien regardé mon code, et j'ai trouvé quelques anomalies :

                              Je suis allé dans l'onglet <Settings> puis <editor>, dans <other settings>, j'ai sélectionné l'option "show spaces in editor".

                              Cette option permet de symboliser les espaces dans le code par de petits points gris.

                              J'ai alors vu qu'il manquait des espaces entre différents codes, notamment la ligne 2 entre #include et  "Personnage.h"  !!!!!!!

                              ( par contre ça redevient des espaces dans le code posté qui est donc utilisable )

                              Je voyais un espace dans l'éditeur, mais pas de petit point pour le symboliser.

                              J'ai supprimé ce caractère invisible et j'ai mis un espace.

                                                                  Puis j'ai compilé et CA MARCHE ENFIN !!!

                              Merci à tous pour votre aide sur cette erreur vraiment bête, au moins j'en ai appris plus sur le logiciel et la programmation.

                              Je suis nouveau sur le site et ça fait plaisir de voir que la communauté est active :)

                              A bientôt

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Erreur compilation sous code blocks

                              × 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