为什么从不兼容的pointertype"生成此代码"赋值?警告?

时间:2015-11-11 14:02:25

标签: c arrays shell pointers struct

我自己写了一个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:如果有人需要更多代码或信息,请不要犹豫,我还有更多代码或信息;)

1 个答案:

答案 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;