是否存在链接类问题?我不知道发生了什么事

Having linking classes issue? c++ I have no clue what is up

本文关键字:我不知道 发生了 什么 问题 存在 链接 是否      更新时间:2023-10-16

我有三个类。

头等舱:

#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

我的三等舱#如果索引C_SSF_FOLDER_H#定义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。我包括"C_SSF_Folder_Container.h"并声明一个C_ SSF_Folder_Container容器。在声明变量之前,它编译良好。在我声明之后我的C_SSF_Folder_Container中有语法错误严重性代码描述项目文件行禁止显示状态错误C2061语法错误:标识符"C_SSF_Folder"CSSFileSystem\projects\CSSFileSystem\csfilesystem\co_SSF_Folder_container.h 16
错误C2061句法错误:标识符"C_SSF_Folder'CSSFileSystem\project\csfileSystem\csfilesystem \co_sf_Folder_container.h 19
当我自己查看它时,我认为有问题,因为我的C_SSF_文件夹包含C_SSF_older_container。且C_ SSF_Folder_Container包含C_但定义应该照顾好它吗?除此之外,我不知道问题出在哪里。

所有内容都键入正确。

您有一个循环#include--C_SSF_Folder_Container.h#包括C_SSF_Folder.h和C_SSF_older.h#包括C_SSF_Folder_Container.h。

这将导致无限的回归(和编译器崩溃),除非你在文件的顶部有#ifndef/#define保护(你应该这样做);正因为如此,你得到的是这两个.h文件中的一个看不到另一个,这就是为什么你会得到这些错误。

解决这个问题的唯一方法是通过删除组成它的两个#包含中的一个来打破这个圆圈。我建议从C_SSF_Folder_Container.h中删除#include "C_SSF_Folder.h",并使用前向声明(例如class C_SSF_Folder;)。

C_SSF_Folder.h和C_SSD_Folder_Container.h相互包含(循环依赖)。

当编译器编译C_SSF_Folder_Container对象时,它需要创建一个C_SSF_Folder对象作为它的字段,但是,编译器需要知道C_SSF_Folder对象的大小,所以它到达C_SSF_文件夹对象并试图构造它,这是一个典型的先有鸡后有蛋的问题,两个文件都相互依赖才能编译。

因此,正确的方法是使用正向声明来打破循环依赖关系(包括彼此)。

在C_SSF_Folder.h中,向前声明C_SSF_Folder_Container。

#include <windows.h>
#include <fstream>
using namespace std;
class C_SSF_Folder_Container;
class C_SSF_Folder {
public:
private:
C_SSF_Folder_Container cl_SSFFC_Folder_Container;
public:
};
#endif

最后,将C_SSF_Folder_Container.h包含在C_SSF_Folder.cp.中


您还可以在以下链接中了解更多信息:

循环依赖关系(Wiki):
https://en.wikipedia.org/wiki/Circular_dependency
Scott Langham的前瞻性声明
C++中的正向声明是什么?

相关文章: