2014-02-14 157 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;

這意味着,在每一個比較的左側的兩個引用實際結構,而不是指針結構。

相關問題