#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()
, но это ваша домашняя работа 🙂