2010-01-23 100 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