gpt4 book ai didi

c - 结构、包含、前向声明... C

转载 作者:行者123 更新时间:2023-11-30 20:11:11 25 4
gpt4 key购买 nike

由于结构引用自身,我再次陷入困境......我知道有成千上万的问题与这个问题有关,我什至已经自己发布了一个!我就是想不通!我希望这次我能理解...

我有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中:未知类型名称"file"和“目录”- 在 vi​​rtuald.h 中:未知类型名称“目录”

顺便说一句,我正在使用 -Wall -Werror -ansi -pedantic 进行编译

谢谢

最佳答案

规则#1:保持一致!

你似乎在 typedef struct A A; 之间交替声明和struct A (然后不使用 structA 后记)。

我建议您在上一个问题中放弃typedef!!它们似乎只会让您感到困惑。

让我们举一个非常简单的例子。

这样做:

结构声明(和定义):简单,无 typedef:

struct A {
int x; // whatever
int y; // whatever
// ... etc
};

结构体类型的用法:关键字struct后跟结构名称:

struct A a;
a.x = 24;
a.y = 42;

(转发)声明:

struct A;

就是这样。所有你必须知道的。 忘记typedef s,并且始终使用关键字 struct 在结构名称之前。

<小时/>

你如何应用这个例子?让我们来看看你的第一个file

使用类型 directoryvirtuald仅作为指针,因此您所需要的只是它们的前向声明:

struct directory;
struct virtuald;

定义你的结构,声明你的函数。始终使用关键字struct命名结构类型时:

struct file {
struct directory* d;
// ^~~~~~
// struct keyword
};

struct file* createFile(struct virtuald*, struct directory*);
//^~~~ ^~~~~ ^~~~~~
// struct keyword for each naming of a struct type

把它们放在一起:

// file file.h
struct directory;
struct virtuald;

struct file {
directory* d;
};
struct file* createFile(struct virtuald*, struct directory*);

关于c - 结构、包含、前向声明... C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41960758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com