基于我遇到的错误,我前一段时间有类似的帖子。我能够解决它,但从那时起我一直在做事情,因为标头阻止其他标头使用代码。老实说,这些标题让我很困惑,如果有人有任何资源可以解决这些类型的问题,那将会有所帮助。
我基本上想要做的是能够将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......
答案 0 :(得分:5)
正如我在之前关于此问题的回答中所写,谷歌关于C ++中的Forward declaration
。
这可能会解决您的问题,但是,循环标头依赖性再次表明应用程序设计不佳。
答案 1 :(得分:3)
至少如果我理解你的问题,你会遇到一些问题。您基本上需要构建标题,以便包含形成有向无环图(强调非循环)。
您可能需要做的是将“renderengine.h”分成两部分,其中一部分只包含前向声明,另一部分包含当前其余内容。然后,您将“forward declarations”标头包含在“rmodel.h”中,并将“rmodel.h”包含在“renderengine.h”中。
虽然有时候这是不可避免的,但这种循环依赖往往指出你组织模块的方式存在问题。完全有可能你目前拥有的renderengine.h和rmodule.h应该是一个标题,或者可能是多个标题但是在不同的行上都有。