2010-12-06 31 views
3

私は2つのクラスがDeckクラスとHandクラスであるポーカープログラムを作成しています。 HandクラスはDeckクラスを継承しているので、そのPrintGroupメソッドを使用できます。継承エラー: "{'token"の前に予期されるクラス名

expected class-name before '{' token 

を行を参照:私は私が言うエラーを取得するコンパイルするときしかし、

class Hand : public Deck{ 

ここでは2つのクラスのヘッダーのためのコードです。誰も私がこれを解決するのを助けることができますか?

@ marcogの腸は、(多分Card.hがHand.hが含まれ、それは循環依存関係が正確であるであることを感じると仮定すると、//ハンドヘッダ

#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 */ 

//デッキヘッダ

#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

Card.hをどこにでも含めると、前方宣言は実際には必要ありません。フォワード宣言を削除してもエラーが発生しますか? –

+9

card.hを貼り付けることはできますか?あなたは循環依存を持っていると感じています。 – marcog

答えて

3

、これにより、ハンドヘルドファイルのハンドラファイルをインポートする前に、Deckクラスの宣言に至るまで)、これはフォワード宣言によって解決できます。

すでにCardクラス( "class Card;")のフォワード宣言があります。したがって、あなたは本当に#include "Card.h"する必要がありますか?そのインクルードを削除しても、前方宣言のためにクラスCardを参照することはできますが、循環依存を解決する可能性があります。

私が本当に必要がない限り、私は通常、C++の他の.hファイルから#include .hファイルを取得しません。別のファイル(ポインタ、参照、またはベクターのようなコンテナに入れる)でクラスを参照しているだけの場合は、クラスを前方宣言し、.cppからのヘッダーファイルを物理的にインクルードするだけですファイルのみ。

関連する問題