2014-02-14 11 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' 멤버는 포인터가 아니므로'current-> p.block_num' 등이어야합니다 ... –

답변

0

-> 연산자는 개체에 대한 포인터가 있고 개체 멤버에 액세스하려는 경우에 사용됩니다. 이 경우 포인터가 아닌 패킷 구조에 대한 인스턴스가 있습니다. -> 연산자를 사용하여 멤버에 액세스하려고합니다. 이것은 입니다.입니다. 대신 . 연산자를 사용해야합니다.

예 : current->p.block_num은 패킷 블록 번호를 제공합니다.

다음

Wikipedia article에서 설명

  • a->b 구조는 역 참조 (객체의 부재는 ba 가리키는)로 알려져있다.
  • a.b은 구조체 참조 (객체 의 구성원 b)로 알려져 있습니다.
0

오류 잘못 current -> next -> p -> block_numcurrent -> p -> block_nump 소자에 의한 간접 참조이다.

각각 current -> p.block_numcurrent -> p.block_num이어야합니다. 당신이 struct packet p;하지 struct packet *p;struct listp를 선언

알 수 있습니다.

즉, 각 비교의 ​​왼쪽에있는 두 개의 참조는 실제 구조체가 아니라 구조체에 대한 포인터입니다.

관련 문제