Je suis réellement novice en C++ et j'essaie de compléter un petit projet pour comprendre l'héritage. J'ai des problèmes avec les déclarations include et forward. Voici les en-têtes suivants qui semble être en cause:Classes d'inclusion circulaire et de déclaration directe
player.h:
#ifndef PLAYER_H
#define PLAYER_H
#include "abstractPlayerBase.h"
#include "cardException.h"
class abstractPlayerBase;
class Player: public AbstractPlayerBase
{
...
//a function throws a CardException
};
#endif
baseCardException.h:
#ifndef BASECARDEXCEPTION_H
#define BASECARDEXCEPTION_H
#include "Player.h"
class BaseCardException
{
...
};
#endif
cardException.h:
#ifndef CARDEXCEPTION_H
#define CARDEXCEPTION_H
#include "baseCardException.h"
class Player; //the problem seems to be here
class CardException: public BaseCardException
{
public:
CardException(const Player& p);
};
#endif
utilisant cette cardException.h je reçois les erreurs: cardException.h: error: expected class-name before ‘{’ token
et cardException.h: error: multiple types in one declaration
si j'utilise ceci pour cardException:
#ifndef CARDEXCEPTION_H
#define CARDEXCEPTION_H
#include "baseCardException.h"
class BaseCardException; //this changed
class CardException: public BaseCardException
...
les erreurs: cardException.h: error: invalid use of incomplete type ‘class BaseCardException’ class CardException: public BaseCardException
et CardException.h: error: ‘Player’ does not name a type
se produit.
Si utiliser les deux déclarations avant: cardException.h:8:7: error: multiple types in one declaration class BaseCardException
et cardException.h: error: invalid use of incomplete type ‘class BaseCardException’
Je veux juste savoir ce que je fais mal ici?
'class abstractPlayerBase.h;' est une déclaration forward incorrecte et inutile. Notez également que les erreurs signalées par le compilateur peuvent en fait être le résultat d'un code incorrect dans les fichiers inclus. – orhtej2
'class abstractPlayerBase.h' dans le player.h est une syntaxe invalide. Cela entraînera la rupture de la compilation pour tout fichier d'en-tête contenant player.h. Plutôt que de lire le message d'erreur LAST émis par le compilateur, trhy revenir en arrière et en lisant le premier. Le premier message d'erreur est plus susceptible de représenter un problème réel, tandis que le dernier message d'erreur peut être tronqué en raison de la confusion du compilateur par les problèmes antérieurs. – Peter
Créez un [mcve]. – user2079303