编译时我一直收到这个错误。有人能告诉我为什么会这样吗? 我在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编译器
答案 0 :(得分:4)
编译chess.c
时,需要知道Pieces
typedef扩展为什么才能处理使用该类型声明的变量。
可以在不知道指向的类型的完整定义的情况下处理指针类型,但是对象类型需要知道完整定义,因为它们为变量分配空间。要知道需要多少空间,编译器需要知道结构成员是什么。
当编译器正在处理chess.c
时,它只包含该源文件中的信息及其包含的任何文件。除非您在某处#include "board.c"
,否则在编译chess.c
时结构定义不可用。将#include
与.c
文件一起使用通常是错误的,它通常只能与.h
个文件一起使用。这就是结构定义及其相应的typedef通常放在.h
文件中的原因。