2010-12-06 17 views
3

Je suis en train d'écrire un programme de poker, où deux classes que j'ai sont une classe Deck et une classe Hand. La classe Hand hérite de la classe Deck, de sorte qu'elle peut utiliser sa méthode printGroup. Cependant, quand je compile je reçois une erreur qui dit:erreur d'héritage: "nom de classe attendu avant '{' jeton"

expected class-name before '{' token 

se référant à la ligne:

class Hand : public Deck{ 

Voici le code pour les deux têtes de classe. Quelqu'un pourrait-il m'aider à résoudre ce problème?

// tête à la main

#ifndef HAND_H 
#define HAND_H 

#include <iostream> 
#include <vector> 
#include "Deck.h" 
#include "Card.h" 

class Card; 

class Hand : public Deck{ //error occurs from this line 
public: 
    Hand(){} 
    void createHand(std::vector<Card> &, std::vector<Card> &); 
}; 


#endif /* HAND_H */ 

// tête de pont

#ifndef DECK_H 
#define DECK_H 

#include <iostream> 
#include <vector> 
#include "Card.h" 

class Card; 

class Deck{ 
public: 
    Deck(){} 
    void createDeck(std::vector<Card> &); 
    void printGroup(std::vector<Card> &, int); 
    void sortDeck(std::vector<Card> &, int, int); 
}; 

#endif /* DECK_H */ 
+0

Étant donné que vous incluez Card.h partout, la déclaration directe n'est pas vraiment nécessaire. Est-ce que l'erreur se produit avec la déclaration avant supprimée, aussi? –

+9

Pouvez-vous coller card.h? Le sentiment de l'intestin est que vous avez une dépendance circulaire. – marcog

Répondre

3

En supposant que @ marcog de l'intestin sentiment qu'il est une dépendance circulaire est correcte (peut-être Card.h comprend Hand.h, ainsi, en important le fichier Hand.h avant de passer à la déclaration de la classe Deck), cela peut être résolu par des déclarations forward. Je vois que vous avez déjà une déclaration de la classe Card ("class Card;"). Par conséquent, avez-vous vraiment besoin de #include "Card.h"? Si vous supprimez cette inclusion, vous pouvez toujours faire référence à la classe Card en raison de la déclaration avant, mais cela peut résoudre la dépendance cyclique.

Généralement, je n'ai pas #include fichiers .h d'autres fichiers .h en C++ sauf si je dois vraiment le faire. Si vous faites simplement référence à une classe dans un autre fichier (par pointeur, référence ou en le plaçant dans un conteneur comme un vecteur), vous pouvez vous contenter de déclarer la classe et d'inclure physiquement le fichier d'en-tête du fichier .cpp fichier seulement.