рефакторинг моего кода. Мои заголовки (Проблемы с заголовком) - PullRequest
0 голосов
/ 25 мая 2010

У меня было сообщение, похожее на это недавно, из-за ошибки, которую я получал. Я смог это исправить, но с тех пор у меня возникли проблемы с работой, потому что заголовки продолжают блокировать использование других заголовков кода. Честно говоря, эти заголовки сбивают меня с толку, и если у кого-то есть какие-либо ресурсы для решения этих типов проблем, это будет полезно.

Что я хочу сделать, так это включить rModel.h в RenderEngine.h. каждый раз, когда я добавляю rModel.h в RenderEngine.h, rModel.h больше не может использовать RenderEngine.h. (rModel.h также имеет #include 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 ]

5 голосов
/ 25 мая 2010

Как я уже писал в моем предыдущем ответе на этот вопрос, google о Forward declaration в C ++. Это может решить ваши проблемы, но, опять же, циклические зависимости заголовка указывают на плохой дизайн приложения.

3 голосов
/ 25 мая 2010

По крайней мере, если я правильно понимаю ваш вопрос, у вас есть небольшая проблема. По сути, вам нужно структурировать заголовки так, чтобы включения образовывали ориентированный ациклический граф (акцент на ацикличный ).

То, что вам, возможно, придется сделать, это разбить ваш "renderengine.h" на две части, одна из которых содержит только предварительные объявления, а другая - оставшуюся часть текущего содержимого. Затем вы включите этот заголовок «forward декларации» в «rmodel.h» и включите «rmodel.h» в «renderengine.h».

Хотя бывают случаи, когда это неизбежно, такая круговая зависимость часто указывает на проблему с тем, как вы организовали свои модули. Вполне возможно, что то, что у вас сейчас есть как renderengine.h и rmodule.h, должно быть одним заголовком или, возможно, несколькими заголовками, но разбито на разные строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...