我在不同文件中使用结构时遇到问题

Posted

技术标签:

【中文标题】我在不同文件中使用结构时遇到问题【英文标题】:I have a problem in the using of a struct in different files 【发布时间】:2021-08-04 02:33:52 【问题描述】:

我在 file.c 中定义了一个结构,并在他的头文件中为他的指针定义了一个 typedef。 我想在另一个 file.c 中使用这个 typedef,但它不起作用。我认为这是文件包含的问题。

在文件game.c中

#include <stdbool.h>
#include <stdlib.h>

#include "chessSystem.h"
#include "tournament.h"
#include "game.h"
#include "map.h"
#include "player.h"

struct Game_node

    int game_id;
    Game_data game_data;
    Game next;
;

在文件game.h中我正在做:

typedef struct Game_Node *Game;

我想在另一个文件中使用这个结构:tournament.c 在一个函数中我尝试定义一个 Game 类型的变量。但我无法访问结构的字段。

#include "game.h"
..........

Game temp_game=malloc(sizeof(*temp_game));
    temp_game->

重要的是,在分配 temp_game 时,IDE 会发出错误信号:“sizeof”对不完整类型“struct Game_node”的无效应用。

我知道这不是很清楚。 如果您有任何问题,请告诉我。

非常感谢。

【问题讨论】:

将结构体定义从C文件移动到头文件。 将结构定义移动到它所属的.h文件中。如果它不在.h 文件中,那么当然其他文件看不到它。想想吧。 请参阅Is it a good idea to typedef pointers? — TL;DR 答案通常是“否”,函数指针可能存在例外。 【参考方案1】:

类型定义typedef struct Game_Node *Game; 指的是不完整的类型,因为结构Game_Node 的详细信息未知。编译器仍然可以编译仅使用指向 struct Game_Node 的指针的代码,但不能编译使用 sizeof(struct Game_Node) 或访问此结构成员的代码。

常见的情况是FILE 通常在&lt;stdio.h&gt; 中定义为不完整类型。各种流函数采用FILE *,用户代码不需要知道实现的细节,这在不同系统之间会有很大差异。

您应该将结构定义从 game.c 移动到 game.h

如果你想限制对结构内部的访问,你可以在一个单独的文件中定义它gamedef.h只包含在适当的模块中。

【讨论】:

以上是关于我在不同文件中使用结构时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

我在“for”循环中遇到文件读/写问题

我在将图像添加到颤振项目时遇到问题

为什么我在从不同的过程中读取文件时遇到竞争条件?

我在使用 Mozilla Firefox 和背景图片时遇到问题

在 AngularFirestore 中使用来自两个不同集合的数据构建对象时遇到问题

我在将 Css 文件链接到 Django 模板时遇到问题