我有三节课。
头等舱:
#ifndef C_LINKED_LIST_H
#define C_LINKED_LIST_H
class CLinkedList {
private:
//removed code for brevity
public:
// removed code for brevity
};
#endif
第二课:
#ifndef C_SSF_FOLDER_CONTAINER_H
#define C_SSF_FOLDER_CONTAINER_H
#include "C_SSF_Folder.h"
#include "CLinkedList.h"
class C_SSF_Folder_Container {
private:
// removed code for brevity
public:
int Add_Folder(C_SSF_Folder *_pcl_SSF_Folder);
C_SSF_Folder *Get_Folder(int _i_Index);
C_SSF_Folder *Get_Folder(char *_pch_Name);
//^-----errors
};
#endif C_SSF_FOLDER_CONTAINER_H
我的第三节课 #ifndef C_SSF_FOLDER_H #define C_SSF_FOLDER_H
#include <windows.h>
#include <fstream>
#include "C_SSF_Folder_Container.h"
using namespace std;
class C_SSF_Folder {
public:
private:
C_SSF_Folder_Container cl_SSFFC_Folder_Container;
public:
};
#endif
我的第三堂课C_SSF_Folder。
我包括&#34; C_SSF_Folder_Container.h&#34;
并声明一个C_SSF_Folder_Container容器。
在声明变量之前,它编译得很好。我宣布之后
我的C_SSF_Folder_Container中出现语法错误
严重性代码描述项目文件行抑制状态
错误C2061语法错误:标识符&#39; C_SSF_Folder&#39; CSSFileSystem \ projects \ cssfilesystem \ cssfilesystem \ c_ssf_folder_container.h 16
错误C2061语法错误:标识符&#39; C_SSF_Folder&#39; CSSFileSystem \ projects \ cssfilesystem \ cssfilesystem \ c_ssf_folder_container.h 19
当我自己调查它时,我认为存在问题,因为我的C_SSF_Folder包含C_SSF_Folder_Container。
和C_SSF_Folder_Container包括C_SSF_Folder
但是定义应该照顾它吗?除此之外,我不知道问题是什么。
所有内容都输入正确。
答案 0 :(得分:2)
你有一个循环#include - C_SSF_Folder_Container.h #includes C_SSF_Folder.h和C_SSF_Folder.h #includes C_SSF_Folder_Container.h。
这会导致无限回归(和编译器崩溃),除了你的文件顶部有#ifndef / #define警告(你应该这样做);而且由于它们,你得到的是那两个.h文件中的一个看不到另一个。这就是你得到这些错误的原因。
解决问题的唯一方法是通过删除构成它的两个#include中的一个来打破这个圈子。我建议从C_SSF_Folder_Container.h中删除#include "C_SSF_Folder.h"
并使用转发声明(例如class C_SSF_Folder;
)。
答案 1 :(得分:0)
C_SSF_Folder.h和C_SSD_Folder_Container.h相互包含(循环依赖)。
当编译器编译C_SSF_Folder_Container对象时,它需要创建一个C_SSF_Folder对象作为其字段,但是,编译器需要知道C_SSF_Folder对象的大小,因此它到达C_SSF_Folder对象并尝试构造它。这是问题,当编译器构造C_SSF_Folder对象时,该对象有一个C_SSF_Folder_Container对象作为其字段,这是一个典型的鸡和蛋问题,两个文件相互依赖以便编译。
所以正确的方法是使用前向声明来打破循环依赖(包括彼此)。
在C_SSF_Folder.h中,进行C_SSF_Folder_Container的前向声明。
{{1}}
最后,在C_SSF_Folder.cpp中包含C_SSF_Folder_Container.h。
<小时/> 您还可以通过以下链接了解更多信息: