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 !!!!!
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 !!!!
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...|
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.
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.
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.
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
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.
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
" 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. "
" 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
Développeur d'Actiona, logiciel d'automatisation de tâches : actiona.tools - Site Web : jmgr.net
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 ??? "
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.
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
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.
Tout est possible tant qu'on y croit.
Tout est possible tant qu'on y croit.
Tout est possible tant qu'on y croit.