我正在写一个扑克程序,我有两个类是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 */
答案 0 :(得分:3)
假设@ marcog的直觉是它是一个循环依赖是正确的(也许Card.h包含Hand.h,从而在得到Deck
类的声明之前导入文件Hand.h,这可以通过前瞻声明来解决。
我看到你已经有了Card
类(“class Card;
”)的前向声明。因此,你真的需要#include "Card.h"
吗?如果删除该include,由于前向声明,您仍然可以引用类Card
,但它可以解决循环依赖。
除非我真的需要,否则我通常不会使用C ++中其他.h文件的#include
.h文件。如果你只是引用另一个文件中的一个类(通过指针,引用,或者将它放在像vector这样的容器中),那么只需向前声明该类,并从物理上包含来自.cpp的头文件即可。仅限文件。