是否存在链接类问题?我不知道发生了什么事
Having linking classes issue? c++ I have no clue what is up
我有三个类。
头等舱:
#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++中的正向声明是什么?
- 我已经做了一个程序来使用队列链C++表显示学生姓名和身高,现在我想以我不知道如何显示的顺序显示它
- 尝试通过多个函数移动数组,但遇到了我不知道如何修复的错误
- 由于某种原因,我的代码中出现了 [json.exception.type_error.302]。我知道错误意味着什么,但我不知道哪里有故障
- 我正在制作c ++代码,但发生错误我不知道为什么
- 我不知道为什么会发生堆损坏(关于内存分配问题)
- 是否存在链接类问题?我不知道发生了什么事
- 我不知道如何使用 boost,虽然我的老师确实提供了代码,但我遇到了一个错误
- 我同时使用了莱布尼茨和瓦利斯公式来估算π但输出数字错误,我不知道我哪里出错了
- 错误 C2064 — 我不知道我做错了什么
- 我不知道我在哪里泄漏了内存C++
- 字符串下标超出范围.我不知道如何使用字符索引数组,所以我使用了(无符号整数),但它不起作用
- 我想对数组进行排序,但不知道出了什么问题
- 尝试对结构向量进行排序时,我在算法文件中收到 20 个错误。我不知道怎么了?
- 递归Fibonacci.不知道发生了什么
- 我正在做一个学校项目,我遇到了两个错误,我不知道如何纠正它们,任何想法
- 核心转储?我已经通过我的程序很多次不知道出了什么问题
- 欧拉#8项目,我不知道为什么我的代码给出了荒谬的高值
- 学习C++,我不知道我在这里做错了什么
- 代码添加了 和1,我不知道为什么
- 我最基本的c++程序坏了,我不知道为什么