我自己写了一个shell,我总是得到这个警告"从不相容的pointertype"对于以下代码(只是重要的一行)
if (first_struct == NULL)
{
first_struct = &parg;
}
else
{
Pargs** temp = first_struct;
while ((*temp)->next != NULL)
temp = &((*temp)->next);<--incompatible pointer type
(*temp)->next = parg;<--incompatible pointer type
}
parg->next = NULL;
对我来说,只有相同的指针类型。
以下是结构的代码:
typedef struct
{
struct Pargs* next;
char* command;
char* args[11];
} Pargs;
上面几行声明了结构:
Pargs* parg = malloc(sizeof (Pargs));
也许我没有看到自己的失败,但我从几个小时开始看这条线,我不知道为什么这不应该是正确的。
PS:如果有人需要更多代码或信息,请不要犹豫,我还有更多代码或信息;)答案 0 :(得分:5)
typedef struct
{
struct Pargs* next;
char* command;
char* args[11];
} Pargs;
你在struct本身里面引用了typedef Pargs
。这不会起作用,因为它是一个指向不完整类型的指针,在你给出完整的定义之前你不能引用它。
你可以这样做 -
typedef struct name // give any desired name to structure
{
struct name *next; //use struct's name to declare pointer next
char* command;
char* args[11];
} Pargs;