我在不同文件中使用结构时遇到问题
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
通常在<stdio.h>
中定义为不完整类型。各种流函数采用FILE *
,用户代码不需要知道实现的细节,这在不同系统之间会有很大差异。
您应该将结构定义从 game.c 移动到 game.h。
如果你想限制对结构内部的访问,你可以在一个单独的文件中定义它gamedef.h只包含在适当的模块中。
【讨论】:
以上是关于我在不同文件中使用结构时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
我在使用 Mozilla Firefox 和背景图片时遇到问题