首页 > 解决方案 > 我在不同文件中使用结构时遇到问题

问题描述

我在 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”的无效应用。

我知道这不是很清楚。如果你有问题告诉我。

非常感谢。

标签: cstructlinked-listincludetypedef

解决方案


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

常见的情况FILE通常被定义<stdio.h>为不完整的类型。各种流函数采用 aFILE *并且用户代码不需要知道实现的细节,这在系统之间有很大的不同。

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

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


推荐阅读