2010-12-06 62 views
3

我正在寫一個撲克程序,其中我有兩個班級是一個班級和一個班級。 Hand類繼承Deck類,因此它可以使用它的printGroup方法。然而,當我編譯我得到一個錯誤,指出:繼承錯誤:「期待的班級名稱」{'token「

expected class-name before '{' token 

參考線:

class Hand : public Deck{ 

下面是兩個類的頭文件中的代碼。有誰能幫我解決這個問題嗎?

//手頭

#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,所以前向聲明並不是真的必要。在去除前向聲明時是否發生錯誤? – 2010-12-06 01:15:40

回答

3

假設@ marcog腸道感覺,這是一個循環依賴是正確的(也許Card.h包括Hand.h,從而在得到Deck類的聲明之前導入Hand.h文件),這可以通過前向聲明來解決。

我看到你已經有Card類的前向聲明(「class Card;」)。因此,你真的需要#include "Card.h"嗎?如果刪除了包含,則由於前向聲明的原因,仍然可以引用類Card,但它可能會解決循環依賴性問題。

我通常不會在C++中從其他.h文件中刪除#include .h文件,除非我真的必須這樣做。如果您只是在另一個文件中引用一個類(通過指針,引用或將其放入像容器一樣的容器中),那麼只需向前聲明該類,並從.cpp物理地包含頭文件即可脫身僅文件。