参数类型无效

时间:2014-02-14 03:39:19

标签: c

我正在尝试编译我的代码,但我一直收到此错误。

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的新手。任何帮助都会受到赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

->运算符用于指向对象并希望访问对象成员的实例。在这种情况下,您有一个不是指针的数据包结构的实例。您正尝试使用->运算符访问其成员。这是不正确。相反,您应该使用.运算符。

例如:current->p.block_num会为您提供数据包块号。

以下Wikipedia article中描述了以下内容:

  • a->b被称为结构解除引用(b指向的对象的成员a
  • a.b被称为结构引用(对象b的成员a)。

答案 1 :(得分:0)

错误是由pcurrent -> next -> p -> block_numcurrent -> p -> block_num元素的错误解除引用引起的。

它们应分别为current -> p.block_numcurrent -> p.block_num

请注意,您在p中将struct list声明为struct packet p;而不是struct packet *p;

这意味着每个比较左侧的两个引用是实际结构,而不是结构的指针。