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

deferencing pointer to incomplete type on my custom list

我正在编写一个包含一些操作的自定义列表,但我在使用 "deferencing pointer to incomplete type error" 时遇到了问题 这是结构定义:

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);
    }
}

为什么我不能尊重温度?

这是错误的

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;
};
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*