【发布时间】:2014-05-05 04:12:44
【问题描述】:
我有 5 组“.h”和“.cpp”文件:
- Main.cpp
- Game.h、Game.cpp
- Parent.h、Parent.cpp
- Child1.h、Child1.cpp
- Child2.h、Child2.cpp
Main 不包含类,也不包含头文件 - 并且是应用程序的起点。除其他外,它使用收集的信息初始化“Game”类型的变量“myGame”。
Main.cpp
#include "Game.h"
...
Game myGame(*parameters sent to constructor*)
游戏是我的应用程序的主体。它的标头包括 Child1 和 Child2 并使用这些类型初始化变量。它声明了“游戏”类
Game.h
#pragma once
#include "Child1.h"
#include "Child2.h"
class Game
{
public:
Game(HWND hWnd, ...);
~Game();
Child1 child1Obj;
Child2 child2obj[20];
...
private:
...
};
Parent 泛化了两个子类,并提供了类似的函数和变量。它的标头不包含其他文件。
Parent.h
#pragma once
class Parent
{
public:
Parent(void);
~Parent(void);
...
};
Child1 和 Child2 都相似,并且包含父标题。
Child1.h
#pragma once
#include "Parent.h"
class Child1 :
public Parent
{
public:
Child1();
~Child1();
};
我希望能够在Parent、Child1 和Child2 中使用Game 中包含的数据。
我的第一个猜测是简单地将#include "Game.h" 插入到Parent.h 的顶部,但这样做会导致循环依赖。
接下来,我想只要我想在Game 中使用变量和函数,就必须引用实际的游戏对象myGame.(在Main.cpp 中创建)。但我不知道该怎么做。也许我可以提前在Main.h 文件中声明myGame,如下所示:
Main.h
#pragma once
#include "Game.h"
Game myGame;
但为了做到这一点,我仍然必须使用#include "Game.h",并在我想使用myGame 的文件顶部包含“Main.h” - 导致与相同的循环依赖问题如上所述。
我有什么办法:
- 在“Main.h”中声明一个 Game 类型的未初始化
myGame - 使用“Main.cpp”中收集的信息初始化
myGame - 通过包含声明
myGame的文件,在 Parent、Child1 和 Child2 中使用myGame而不会导致循环依赖。
我能否在“Main.h”中使用#include "Game.h" 来创建游戏变量,但阻止对包含“Main.h”的文件的包含继承?
【问题讨论】:
-
Parent、Child1、Child2如何使用Game?也许你可以在 Game 中使用 forward decls。
-
MacklinB,当然这种类型的问题在 [C] 和 [C++] 中都会出现。但是,问题代码显然不是[C]。也许您应该考虑编辑您的问题,并删除 [C] 标记?
-
在
#include "Game.h"中执行Parent.cpp。Parent类定义不能依赖Game,尽管它可以通过前向声明接受指针或引用。当然Parent.cpp中的函数体可以使用完整的Games。
标签: c++ class inheritance include