在我的自定义列表中取消引用指向不完整类型的指针

时间:2015-01-21 15:47:13

标签: c pointers

我正在编写一个包含某些操作的自定义列表,但我遇到了错误的" deferencing指向不完整类型错误" 这是结构定义:

typedef struct TIME_NODE {
    int timeout;
    int seq_number;
    struct time_node* next;
} time_node;

typedef struct TIMEOUT_LIST {
    struct time_node* head;
} timeout_list;

这是其中一个功能

void insert(timeout_list *l, int sequence_number, int timeout)
{
    int c=0;
    struct time_node* temp;
    temp = l->head;
    if(temp==NULL)
    {
        add(sequence_number, timeout);
    }
    else
    {
        while(temp!=NULL)
        {
            if(temp->timeout < timeout) {
                c++;
            }
            temp = temp->next;
        }
        if(c==0)
            add(sequence_number, timeout);
        else if(c<count())
            add_after(sequence_number, timeout, ++c);
        else
            append(sequence_number, timeout);
    }
}

为什么我不能谦虚?

2 个答案:

答案 0 :(得分:2)

这是错误的

struct time_node* temp;

应该是

struct TIME_NODE* temp;

但是因为你有typedef编辑它,所以这应该足够了

time_node* temp;

你应该在struct TIMEOUT_LIST修复它。

如果您希望任何一种语法都可以使用,那么您必须为结构使用相同的名称,并使用typedef这样的名称

typedef struct time_node {
    int timeout;
    int seq_number;
    struct time_node* next;
} time_node;

你甚至可以这样做

typedef struct time_node time_node;
struct time_node {
    int timeout;
    int seq_number;
    time_node* next;
};

答案 1 :(得分:1)

typedef struct TIME_NODE {
    int timeout;
    int seq_number;
    struct time_node* next;
} time_node;

这将创建一个名为TIME_NODE的结构类型(可以使用struct TIME_NODE进行声明,然后将其定义为time_node

您需要使用struct TIME_NODE*类型或time_node*声明变量。