C 将指针延迟到自定义列表上的不完整类型

C 将指针延迟到自定义列表上的不完整类型,c,pointers,C,Pointers,我正在编写一个自定义列表,其中包含一些操作,但我遇到了“将指针延迟到不完整类型错误”的问题 以下是结构定义: 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 in

我正在编写一个自定义列表,其中包含一些操作,但我遇到了“将指针延迟到不完整类型错误”的问题 以下是结构定义:

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);
    }
}
void插入(超时\u列表*l,整数序列号,整数超时)
{
int c=0;
结构时间节点*temp;
温度=升->压头;
if(temp==NULL)
{
添加(序列号、超时);
}
其他的
{
while(temp!=NULL)
{
如果(临时->超时<超时){
C++;
}
温度=温度->下一步;
}
如果(c==0)
添加(序列号、超时);
否则,如果(c这是错误的

struct time_node* temp;
应该是

struct TIME_NODE* temp;
但是既然您已经
typedef
ed了它,那么这就足够了

time_node* temp;
您也应该在
struct TIMEOUT\u列表中修复它

如果您希望其中一种语法工作,那么必须对结构和
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;
};
这是错误的

struct time_node* temp;
应该是

struct TIME_NODE* temp;
但是既然您已经
typedef
ed了它,那么这就足够了

time_node* temp;
您也应该在
struct TIMEOUT\u列表中修复它

如果您希望其中一种语法工作,那么必须对结构和
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;
};
这是错误的

struct time_node* temp;
应该是

struct TIME_NODE* temp;
但是既然您已经
typedef
ed了它,那么这就足够了

time_node* temp;
您也应该在
struct TIMEOUT\u列表中修复它

如果您希望其中一种语法工作,那么必须对结构和
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;
};
这是错误的

struct time_node* temp;
应该是

struct TIME_NODE* temp;
但是既然您已经
typedef
ed了它,那么这就足够了

time_node* temp;
您也应该在
struct TIMEOUT\u列表中修复它

如果您希望其中一种语法工作,那么必须对结构和
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;
};
这将创建一个名为
TIME\u NODE
(可以使用
struct TIME\u NODE
声明)的结构类型,然后将其键入
TIME\u NODE

您需要使用类型
struct TIME\u NODE*
TIME\u NODE*
声明变量

这将创建一个名为
TIME\u NODE
(可以使用
struct TIME\u NODE
声明)的结构类型,然后将其键入
TIME\u NODE

您需要使用类型
struct TIME\u NODE*
TIME\u NODE*
声明变量

这将创建一个名为
TIME\u NODE
(可以使用
struct TIME\u NODE
声明)的结构类型,然后将其键入
TIME\u NODE

您需要使用类型
struct TIME\u NODE*
TIME\u NODE*
声明变量

这将创建一个名为
TIME\u NODE
(可以使用
struct TIME\u NODE
声明)的结构类型,然后将其键入
TIME\u NODE


您需要使用类型
struct TIME\u NODE*
TIME\u NODE*
声明变量。谢谢大家,解决了问题并理解了原因。我很高兴,您可以接受对您更有效的答案。注意:您可以省略
struct TIMEOUT\u列表
和大部分{add,add\u after,append}使用指向指向
struct THE_NODE
的指针作为函数参数的逻辑。感谢各位,解决了问题并理解了问题的原因。我很高兴,您可以接受对您更有效的答案。注意:您可以省略
struct TIMEOUT_LIST
和大部分{add,add_after,append}使用指向指向
struct THE_NODE
的指针作为函数参数的逻辑。感谢各位,解决了问题并理解了问题的原因。我很高兴,您可以接受对您更有效的答案。注意:您可以省略
struct TIMEOUT_LIST
和大部分{add,add_after,append}使用指向指向
struct THE_NODE
的指针作为函数参数的逻辑。感谢各位,解决了问题并理解了问题的原因。我很高兴,您可以接受对您更有效的答案。注意:您可以省略
struct TIMEOUT_LIST
和大部分{add,add_after,append}通过使用指向指向\u节点
结构的指针作为函数参数的指针进行逻辑。