我正在尝试编译我的代码,但我一直收到此错误。
error: invalid type argument of '->' (have 'struct packet')
部分初始化:
struct list *current;
struct packet p;
struct packet *newpacket = malloc(sizeof(p));
此行导致错误,但我不知道出了什么问题。
if ((current -> p -> block_num < newpacket -> block_num) && (current -> next -> p -> block_num > newpacket -> block_num)){
我的标题文件:
struct packet {
unsigned short block_num;
unsigned short block_size;
unsigned short crc;
unsigned char *payload;
};
struct list {
struct packet p;
struct list *next;
};
我不明白什么是错的,而且我是C的新手。任何帮助都会受到赞赏。谢谢!
答案 0 :(得分:1)
->
运算符用于指向对象并希望访问对象成员的实例。在这种情况下,您有一个不是指针的数据包结构的实例。您正尝试使用->
运算符访问其成员。这是不正确。相反,您应该使用.
运算符。
例如:current->p.block_num
会为您提供数据包块号。
以下Wikipedia article中描述了以下内容:
a->b
被称为结构解除引用(b
指向的对象的成员a
。a.b
被称为结构引用(对象b
的成员a
)。答案 1 :(得分:0)
错误是由p
和current -> next -> p -> block_num
中current -> p -> block_num
元素的错误解除引用引起的。
它们应分别为current -> p.block_num
和current -> p.block_num
。
请注意,您在p
中将struct list
声明为struct packet p;
而不是struct packet *p;
。
这意味着每个比较左侧的两个引用是实际结构,而不是结构的指针。