CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] Problème d'héritage

N_Near
N_Near
Niveau 10
07 avril 2013 à 19:45:18

Bonsoir, quand mon RPG, quand je veux que ma classe guerrier hérite de Personnage, ça me fout une erreur...

code de Guerrier.h :

  1. ifndef GUERRIER_H_INCLUDED
  2. define GUERRIER_H_INCLUDED
  1. include <iostream>
  2. include <string>
  3. include "Personnage.h"
  4. include "Magicien.h"

class Guerrier : public Personnage
{

};

  1. endif // GUERRIER_H_INCLUDED

Code de Personnage.h :

  1. ifndef PERSONNAGE_H_INCLUDED
  2. define PERSONNAGE_H_INCLUDED
  1. include <iostream>
  2. include <string>
  3. include "Guerrier.h"
  4. include "Magicien.h"

class Personnage
{
public:
Personnage(int vie);
void coupDePoing(int degats);
void afficher();

protected:
int m_vie;
std::string m_arme;
};

  1. endif // PERSONNAGE_H_INCLUDED

Nom de l'erreur :
error: expected class-name before '{' token

Merci d'avance.

PocoIo
PocoIo
Niveau 10
07 avril 2013 à 20:16:16

C'est un problème d'inclusion mutuelle, "Personnage.h" est inclus dans "Guerrier.h" et ce dernier est lui-même inclus dans "Personnage.h".

Lorsque tu utilise #include en C++, le pré-processeur remplace la ligne en question par le contenu du fichier à inclure. En sachant cela essaye d'imaginer ce qui se passe lorsque tu inclus personnage.h dans un fichier cpp.

D'abord il va voir que la macro PERSONNAGE_H_INCLUDED n'est pas définie dans cette unité de traduction et il va la définir, ensuite après avoir inclus iostream et string il va tomber sur la ligne "#include "Guerrier.h"", regardons ce qui se passe lorsqu'il tente d'inclure Guerrier.h :

Il va voir que la macro GUERRIER_H_INCLUDED n'est pas définie dans l'unité de traduction actuelle et la définir, après avoir inclus iostream et string il va tomber sur la ligne"#include "Personnage.h"", sauf que là il ne va rien faire car il va tomber sur la ligne "#ifndef PERSONNAGE_H_INCLUDED" et comme cette macro a déjà été définie dans cette unité de traduction, il ne va rien inclure, donc en gros à ce moment là la classe Personnage n'a encore jamais été définie.

Ensuite il inclus "Magicien.h" et après il tombe sur la ligne "class Guerrier : public Personnage" alors que la classe Personnage n'est pas définie et n'est donc pas reconnue comme un nom de classe, d'où l'erreur "expected class-name before '{' token".

N_Near
N_Near
Niveau 10
07 avril 2013 à 20:26:41

Ah donc faut pas inclure Magicien.h ni Guerrier.h dans Personnage.h...

Merci, je me coucherai moins bête :rire:

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment