头文件错误:不允许不完整的类型

时间:2013-04-12 15:34:49

标签: c struct header-files keil

这是我的头文件:

typedef int* Arg;   
typedef int* Args[];
typedef int** ArgsList[];

typedef int (*ProcessStart)(Args);

typedef struct PCBEntry{

    ProcessStart proc;
    Args args;
    int pid;
    int curr_proc;
    int sched_info;
    int pc;

} PCBEntry;

我在结构中的Args args行上收到错误,我不明白为什么。

2 个答案:

答案 0 :(得分:3)

由于您将Args定义为int *[],因此成员args实际上被声明为

int *args[];

这是一个灵活的数组成员,它们只允许在结构的末尾。

如果您打算暗示Args是一个指针(与char **argv一样),请将其声明为指针:

typedef int **Args;

答案 1 :(得分:0)

而不是使用

typedef int* Args[];

并在您的结构声明中

Args args;

您最好只使用第一种类型进行结构声明......

Arg args[];

说实话,我甚至不确定第一个是合法的typedef,但是我以前从未做过类似于typedef的事情。我的直觉告诉我,这不合法,因此Args未定义,因此你得到的错误。如果我将左右规则应用于那个,那么Args是一个指向int的指针数组的类型......所以,也许它是合法的,但它确实对我来说很有趣。