2014-02-14 176 views
0

我想编译我的代码,但我不断收到此错误。无效的参数类型

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.任何帮助,将不胜感激。谢谢!

+5

list'的'的构件'p'不是指针,所以它应该是'电流 - > p.block_num'等... –

回答

0

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

例如:current->p.block_num会给你包块数。

以下在本Wikipedia article描述:

  • a->b已知为结构解除引用(成员对象的b指向a)。
  • a.b已知为结构参考(对象a的构件b)。
0

该错误是由在current -> next -> p -> block_numcurrent -> p -> block_num错误地解引用p元件所引起的。

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

请注意,您声明pstruct liststruct packet p;而不是struct packet *p;

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

相关问题