【发布时间】:2017-01-31 15:00:39
【问题描述】:
我又一次因为引用自己的结构而陷入困境...... 我知道关于这个问题有成千上万的问题,我什至自己已经发布了一个! 我就是想不通!希望这次能明白……
我有 3 个结构
//file.h
#ifndef _FILE
#define _FILE
#include "virtuald.h"
typedef struct directory directory;
struct file {
directory* d;
};
file* createFile(virtuald*, directory*);
#endif
//directory.h
#ifndef _DIR
#define _DIR
#include "file.h"
struct directory {
struct directory* father;
file** listf;
struct directory** listd;
};
directory* createDir(int, char*, int, directory*);
#endif
//virtualD.h
#ifndef _VIR
#define _VIR
#include "directory.h"
typedef struct file file;
typedef virtuald {
file** listf;
directory** listd;
}virtuald;
int writeDir(int, directory*);
#endif
如何管理包含和前向声明?我已经测试了很多东西,但我现在完全迷失了。我认为这会起作用!
我遇到了很多错误,例如: - 在 directory.h 中:未知类型名称“文件”和“目录” - 在 virtuald.h 中:未知类型名称“目录”
顺便说一句,我正在使用 -Wall -Werror -ansi -pedantic 进行编译
谢谢
【问题讨论】:
-
它以什么方式“不工作”?
-
不包括警卫?
-
您似乎在 3 个标头之间存在循环依赖关系 - 这真的有必要吗?
-
没有包含保护的循环包含是一个很有趣的秘诀。
-
这个问题与前向声明无关,而是程序设计很差。根据您的设计:“每个文件都有一个目录,每个目录都有文件”。如果你停下来思考一下,这是无稽之谈。在现实世界中,目录有文件——文件没有目录。这就是为什么在编写一行 C 代码之前,您应该坐下来用笔和纸弄清楚所有这些依赖关系。