2010-01-23 96 views
1

我在项目中有3个头文件:Form1.h - 这是实现的头,TaskModel.cpp的TaskModel.h,TaskController.cpp的TaskController.h。头文件的问题

有文件的内容:

//----- 
TaskController.h 

#pragma once 
#include "TaskModel.h" 
.......... 



//---- 
Form1.h 
#pragma once 
#include "TaskModel.h" 
#include "TaskController.h" 
......... 

问题:

如何使Form1.h被列入到TaskModel.h。当我直接将Form1.h包含到TaskModel.h中时,会出现很多错误。如果使用前向声明,如何组织化?

回答

3

您可以转发声明而不是头文件。

循环依赖关系的问题通常是不良设计的标志。你想让TaskModel.h包含Form1.h吗?这是为什么?可以避免吗?难道你不能只包含Form1.h到TaskModel.cpp?

对于向前声明做:

// in TaskModel.h 

class Form1; // or other classes that are using in TaskModel.h 

//... task model code 

// in TaskModel.cpp 

#include "Form1.h" 

基本上你在这里做的是声明这些类存在。然后在cpp文件中包含它们。

心灵然而,这有一定的局限性:

  • 你只能使用前声明的类简单的任务
  • 你不能把它们传递给每值的方法,你不能让他们的班级
  • 成员

作为经验法则,如果需要转发的类的大小来编译给定的代码段,则不能使用转发

+0

TaskModel包括什么。 – 2010-01-23 17:01:17

+0

你是对的,将Form1.h包含到TaskModel.h中(TaskModel.cpp?) – 2010-01-23 17:03:41

+0

嗯,我已经成功编译了项目。谢谢。 – 2010-01-23 17:06:59

-1

我想你是说“TaskModel.h”被你的模块多次包含。为了避免这种情况,在顶部的“TaskModel.h”你可以把:

#ifndef TASK_MODEL_H 
#define TASK_MODEL_H 

然后在文件放的末尾:

#endif 
+0

不,我把杂注在那里。 – 2010-01-23 17:02:23

+0

糟糕,所以你没有... – RickNotFred 2010-01-23 17:04:48