gpt4 book ai didi

c - 具有彼此类型变量的结构

转载 作者:行者123 更新时间:2023-11-30 17:41:48 26 4
gpt4 key购买 nike

我有两个结构DirFileArraydirFile,它们具有彼此类型的变量。我的 Eclipse IDE 对此感到愤怒,因为第一个结构看不到第二个结构的类型(“dirFile”无法解析)。如何让两个结构互相看到?

struct dirFile;

我在顶部添加了一行,但这没有帮助。

struct DirFileArray {
dirFile *array;
size_t used;
size_t size;
}

struct dirFile
{
int contentType ;
char name [STR_SHORT];
struct DirFileArray * content;
};

最佳答案

您需要“转发声明这些数组”。还记得当您学习使用稍后定义的函数时,您做了什么?你可以写:

int func_to_be_defined_later(int param); /* for example */

int main(void)
{
return func_to_be_defined_later(10);
}

int func_to_be_defined_later(int param)
{
return param + 1;
}

与结构类似:

/* forward declaration */
struct DirFileArray;
struct dirFile;

struct DirFileArray { /* note: you had misplaced the struct name */
struct dirFile *array; /* note: you forgot struct */
size_t used;
size_t size;
};

struct dirFile
{
int contentType ;
char name [STR_SHORT];
struct DirFileArray *dirFile;
};
<小时/>

值得注意的是,您只能指向转发已声明的结构(包括正在声明的结构),而没有其中的变量。原因是编译器知道如何分配指针以及给它多少空间,但它不知道如何分配结构以及它的 sizeof 是什么。

事实上,拥有两个包含对方类型变量的结构,或者一个包含自己类型变量(而不是指针)的结构,有点矛盾。尝试思考这样的结构的 sizeof 会是什么。

关于c - 具有彼此类型变量的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21000963/

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