取消引用指向我的自定义列表中不完整类型的指针
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*
。
我正在编写一个包含一些操作的自定义列表,但我在使用 "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*
。