如何在单独的头文件中使用彼此依赖的类?

时间:2014-05-08 01:23:36

标签: c++ include dependencies

我正在写一个纸牌游戏程序。我已经把鱼写在自己的文件(标题和实现文件)中,我现在希望能够从纸牌游戏课中获取鱼。

Go fish继承自纸牌游戏类,因为它包含诸如玩家列表和纸牌组之类的东西。此外,纸牌游戏标题定义了卡片结构。

所以我#include我的go鱼文件中的纸牌游戏文件。但是现在我要做的就是简单地#include我的驱动程序中的卡片游戏文件并从中获取鱼(我将在稍后添加扑克)。

问题是我不能#include卡片游戏类中的go fish文件,因为这会导致无限的包含错误。

以下是获取要点的一些示例代码:

//card_games.h
class card_game{...};

//gofish.h
#include "card_games.h"
class gofish : public card_game{...};

这就是我想要做的事情:

//main.cpp
#include "card_games.h"
//main function
{
      card_game *game;
      game = new gofish; 
}

但在主要方面,它并不承认gofish是一个阶级。 那我该怎么办呢?

6 个答案:

答案 0 :(得分:2)

您需要在main.cpp中包含gofish文件

#include "gofish.h"

主要需要了解它,然后才能在main中创建一个。

答案 1 :(得分:0)

在文件card_games.h的底部包含gofish.h,然后你需要在main()上面只包含card_games.h。

答案 2 :(得分:0)

这就是我的所作所为。

  1. 删除了基类对gofish的了解。

  2. 我创建了一个新文件(games.h)以包含gofish.h并将其包含在我的主文件中。我这样做的原因是因为我将添加另一个游戏,因为这是一个任务,我的想法是我可能会添加更多游戏。

  3. 现在有了这个,我可以在我的gofish.h中包含cardgame.h并从games.h获得gofish。

    感谢大家的帮助。

答案 3 :(得分:0)

我可以考虑以下选项。

  1. main.cpp添加#include "gofish.h"。如果您希望自己的程序玩扑克,请将#include "poker.h"添加到main.cpp

  2. 实施factory pattern,您可以使用字符串处理card_game*。然后,添加虚拟函数play。当您在工厂返回的对象上调用play时,呼叫将被定向到正确的游戏。

答案 4 :(得分:0)

#include "gofish.h"

这是你在main()上面做的。这样你就可以访问gofish和card_game这两个类。我同意这也是非常耦合的。你应该将它们分开,而不是让它们如此耦合。有很多方法可以解决这个问题。取决于代码的复杂程度。

答案 5 :(得分:0)

  1. “无限包含错误”。只是想确定你知道“包含守护宏”,用这个包装所有的标题,或者包含将是你不断的痛苦:
  2. 
    
        #ifndef HEADERNAME_H_
        #define HEADERNAME_H_ 
        ...
        #endif // HEADERNAME_H_
    
    
    1. “我现在希望能够从纸牌游戏课中获取鱼。” - 不,你不必,它破坏了继承的整个想法。在您的样本中,您应该通过包含gofish.h来获得gofish。