Ошибка C2664, требуется уточнение

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

   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);
            }
        }
    }

2 ответа

Решение

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

QUEUEget(&head);

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

QUEUEget(head)

ошибка c2664: невозможно преобразовать параметр 1 из "link **" в "link *" при вызове QUEUEget(&head).

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

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

void receive(link *head);

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

QUEUEget(&head);

Вместо этого просто пройдите head непосредственно:

QUEUEget(head);
Другие вопросы по тегам