我正在写一个纸牌游戏程序。我已经把鱼写在自己的文件(标题和实现文件)中,我现在希望能够从纸牌游戏课中获取鱼。
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是一个阶级。 那我该怎么办呢?
答案 0 :(得分:2)
您需要在main.cpp中包含gofish文件
#include "gofish.h"
主要需要了解它,然后才能在main中创建一个。
答案 1 :(得分:0)
在文件card_games.h的底部包含gofish.h,然后你需要在main()上面只包含card_games.h。
答案 2 :(得分:0)
这就是我的所作所为。
删除了基类对gofish的了解。
我创建了一个新文件(games.h)以包含gofish.h并将其包含在我的主文件中。我这样做的原因是因为我将添加另一个游戏,因为这是一个任务,我的想法是我可能会添加更多游戏。
现在有了这个,我可以在我的gofish.h中包含cardgame.h并从games.h获得gofish。
感谢大家的帮助。
答案 3 :(得分:0)
我可以考虑以下选项。
在main.cpp
添加#include "gofish.h"
。如果您希望自己的程序玩扑克,请将#include "poker.h"
添加到main.cpp
。
实施factory pattern,您可以使用字符串处理card_game*
。然后,添加虚拟函数play
。当您在工厂返回的对象上调用play
时,呼叫将被定向到正确的游戏。
答案 4 :(得分:0)
#include "gofish.h"
这是你在main()上面做的。这样你就可以访问gofish和card_game这两个类。我同意这也是非常耦合的。你应该将它们分开,而不是让它们如此耦合。有很多方法可以解决这个问题。取决于代码的复杂程度。
答案 5 :(得分:0)
#ifndef HEADERNAME_H_
#define HEADERNAME_H_
...
#endif // HEADERNAME_H_