重构我的代码。我的标题(Header Guard问题)

时间:2010-05-25 12:19:26

标签: c++ c visual-studio visual-studio-2008 visual-c++

基于我遇到的错误,我前一段时间有类似的帖子。我能够解决它,但从那时起我一直在做事情,因为标头阻止其他标头使用代码。老实说,这些标题让我很困惑,如果有人有任何资源可以解决这些类型的问题,那将会有所帮助。

我基本上想要做的是能够将rModel.h包含在RenderEngine.h中。每次我将rModel.h添加到RenderEngine.h时,rModel.h都不再能够使用RenderEngine.h。 (rModel.h也有一个#include of RenderEngine.h。)

简而言之,RenderEngine和rModel需要使用彼此的功能。除了所有这些混乱之外,Main.cpp还需要使用RenderEngine。

stdafx.h中

#include "targetver.h"

#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>

// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include "resource.h"

的main.cpp

#include "stdafx.h"
#include "RenderEngine.h"
#include "rModel.h"

// Global Variables:

RenderEngine go;

rModel *g_pModel;

...code...........

rModel.h

#ifndef _MODEL_H
#define _MODEL_H
#include "stdafx.h"
#include <vector>
#include <string>
#include "rTri.h"
#include "RenderEngine.h"

........Code

RenderEngine.h

#pragma once
#include "stdafx.h"
#include "d3d10.h"
#include "d3dx10.h"
#include "dinput.h"
#include "rModel.h"

.......Code......

2 个答案:

答案 0 :(得分:5)

正如我在之前关于此问题的回答中所写,谷歌关于C ++中的Forward declaration。 这可能会解决您的问题,但是,循环标头依赖性再次表明应用程序设计不佳。

答案 1 :(得分:3)

至少如果我理解你的问题,你会遇到一些问题。您基本上需要构建标题,以便包含形成有向无环图(强调非循环)。

您可能需要做的是将“renderengine.h”分成两部分,其中一部分只包含前向声明,另一部分包含当前其余内容。然后,您将“forward declarations”标头包含在“rmodel.h”中,并将“rmodel.h”包含在“renderengine.h”中。

虽然有时候这是不可避免的,但这种循环依赖往往指出你组织模块的方式存在问题。完全有可能你目前拥有的renderengine.h和rmodule.h应该是一个标题,或者可能是多个标题但是在不同的行上都有。