继承错误:“{'标记之前的预期类名”

时间:2010-12-06 01:10:31

标签: c++ inheritance

我正在写一个扑克程序,我有两个类是Deck类和Hand类。 Hand类继承自Deck类,因此可以使用其printGroup方法。但是,当我编译时,我得到一个错误,上面写着:

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

// Deck header

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

1 个答案:

答案 0 :(得分:3)

假设@ marcog的直觉是它是一个循环依赖是正确的(也许Card.h包含Hand.h,从而在得到Deck类的声明之前导入文件Hand.h,这可以通过前瞻声明来解决。

我看到你已经有了Card类(“class Card;”)的前向声明。因此,你真的需要#include "Card.h"吗?如果删除该include,由于前向声明,您仍然可以引用类Card,但它可以解决循环依赖。

除非我真的需要,否则我通常不会使用C ++中其他.h文件的#include .h文件。如果你只是引用另一个文件中的一个类(通过指针,引用,或者将它放在像vector这样的容器中),那么只需向前声明该类,并从物理上包含来自.cpp的头文件即可。仅限文件。