我在项目中有3个头文件:Form1.h - 这是带有实现的头,TaskModel.h有TaskModel.cpp,TaskController.h有TaskController.cpp。
有文件内容:
//-----
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中时,会出现很多错误。如果要使用前向声明,如何组织它?
答案 0 :(得分: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文件中包含它们。
请注意,这有一些限制:
根据经验,如果需要转发的类大小来编译给定的代码段,则不能使用转发。
答案 1 :(得分:-1)
我认为你说你的模块不止一次包含“TaskModel.h”。为了避免这种情况,可以在“TaskModel.h”的顶部放置:
#ifndef TASK_MODEL_H
#define TASK_MODEL_H
然后在文件的末尾放置:
#endif