错误:'name'的存储大小未知

时间:2018-05-07 19:53:56

标签: c gcc struct compiler-errors

编译时我一直收到这个错误。有人能告诉我为什么会这样吗? 我在board.c中声明了这些结构:

struct point {
  short int rank;
  short int file;
};

struct pieces {
  Point pawns[8];
  Point Knights[2];
  Point BBishop;
  Point WBishop;
  Point Rooks[2];
  Point Queen;
  Point King;
};

我在board.h中也有这些typedef:

typedef struct point Point;
typedef struct pieces Pieces;

在主源文件(chess.c)中,我有声明:

Pieces White;

当我编译它时说:

chess.c: In function 'main':
chess.c:19:10: error: storage size of 'White'isn't known

我尝试将结构移到board.h,这很好用。当我在board.c中使用struct时,为什么它不起作用?

gcc编译器

1 个答案:

答案 0 :(得分:4)

编译chess.c时,需要知道Pieces typedef扩展为什么才能处理使用该类型声明的变量。

可以在不知道指向的类型的完整定义的情况下处理指针类型,但是对象类型需要知道完整定义,因为它们为变量分配空间。要知道需要多少空间,编译器需要知道结构成员是什么。

当编译器正在处理chess.c时,它只包含该源文件中的信息及其包含的任何文件。除非您在某处#include "board.c",否则在编译chess.c时结构定义不可用。将#include.c文件一起使用通常是错误的,它通常只能与.h个文件一起使用。这就是结构定义及其相应的typedef通常放在.h文件中的原因。