2013-04-27 2 views
0

Я использую эту функцию в своей программе, и я вызываю ее receive(&head);. Я делаю что-то неправильно и получаю сообщение об ошибке c2664: невозможно преобразовать параметр 1 из «link **» в «link *» при вызове QUEUEget(&head). Если я правильно понимаю, (*head) - это ссылка на другую ссылку, поэтому я должен сделать что-то вроде (&(&head)), но это не сработает.Ошибка C2664, необходимо уточнить

void receive(link *head){ 
     int j; 
     for (j=0;j<WINDOW;j++){ 
     if (((*head)->status==PENDING) || ((*head)->status==NEW)) { 
      (*head)->status=ACK; 
       printf("Packet No. %d: %d\n",(*head)->packetno,(*head)->status); 
       QUEUEget(&head); 
      } 
     } 
    } 
+1

Попробуйте 'QUEUget (head);' – JBentley

ответ

0

Предположительно в этом контексте

QUEUEget(&head); 

head является link*. Вы передаете адрес, который дает вам указатель на указатель, т. Е. link**. Вы, вероятно, нужно

QUEUEget(head) 
+0

Если я это сделаю, я должен использовать '(head) -> status' внутри' if' right? Также, если я использую 'receive (head);' Я получаю ту же проблему, но теперь при вызове функции receive. – user2192519

+0

@ user2192519 возможно, просто 'head-> status'. – juanchopanza

+0

Если я это сделаю, я получаю сообщение об ошибке C2227: left of '-> status' должен указывать на тип class/struct/union/generic. – user2192519

0

ошибка C2664: не удается преобразовать параметр 1 из "ссылки **" в "ссылка *" при вызове QUEUEget (& головы).

Это говорит о том, что функция QUEUEget ожидает link* (указатель на link) в качестве параметра, но вы передаете ему link** (указатель на указатель на link).

В вашей receive функции, параметр head уже link*:

void receive(link *head); 

Однако, в этой строке, вы передаете адрес head (т.е. указатель на link*) в QUEUEget:

QUEUEget(&head); 

Вместо этого, просто передать head непосредственно:

QUEUEget(head); 
+0

Это решило его. Спасибо, теперь мне лучше в голове. – user2192519

+0

@ user2192519 Нет проблем, и приятный непреднамеренный каламбур! – JBentley