ошибка: не удается преобразовать Elem в Elem * для аргумента 1, чтобы отменить addHead(Elem*, Elem *)

#c #pointers #compiler-errors #linked-list

#c #указатели #ошибки компилятора #связанный список

Вопрос:

Я компилирую свой код с помощью g -g и получаю сообщение об ошибке в заголовке.

Ошибка связана с функцией, которую я создал, ее сигнатура является:

 void addHead( Elem *amp;start , Elem *newStart );
  

и я передаю этой функции эти две переменные:

 Elem * head;    
Elem * tempEl;
  

так что это выглядит следующим образом:

 addHead( *head , *tempEl );
  

Фактическая функция:

 void addHead( Elem start , Elem newStart )
{
Elem listItem;

listItem = newStart;
*listItem.next = start;
start = listItem;
}
  

Он переносит второй аргумент в начало связанного списка, начинающегося с первого аргумента.

Я рвал на себе волосы с этим. Что бы я ни делал, я продолжаю получать эту ошибку!

 cannot convert Elem to Elem* for argument 1 to void addHead(Elem*, Elem*)
  

Редактировать: забыл, что эта ошибка тоже есть:

 error: invalid initialization of reference of type Elem*amp; from expression of type Elem
  

Ответ №1:

Это довольно специфично: вы передаете Elem , но для этого требуется Elem* . В частности, head имеет тип Elem* , но вы передаете *head : типа Elem .

Кроме того, ваша подпись определения не соответствует вашему определению, поэтому даже когда вы исправляете вызов, вы получите ошибку компоновщика, когда он не может найти addHead(Elem*, Elem*) . Определения должны точно соответствовать их сигнатурам (точнее, объявлениям). Конечно, ни одно из этих изменений не исправит фактическую реализацию addHead() , но это ваша домашняя работа 🙂