C - Ошибка сборки: невозможно преобразовать в тип указателя - PullRequest
0 голосов
/ 07 мая 2020

Я делаю некоторые вещи с C и сборкой, но когда я вызываю iesimo в main, я получаю следующую ошибку:

    #include <stdio.h>
#include <assert.h>
#include <stdlib.h>

typedef struct nodo_t{
    long dato;
    struct nodo_t *prox;
} nodo;

typedef struct lista_t{
    nodo* primero;
} lista;

extern int iesimo(lista* l, unsigned long i);

int main(int arg, char* argv[]) {
    lista l;
    nodo* n1 = malloc(sizeof(nodo));
    n1->dato = 123;
    n1->prox = NULL;
    l.primero = n1;
    nodo* n2 = malloc(sizeof(nodo));
    n2->dato = 456;
    n2->prox = NULL;
    n1->prox = n2;
    nodo* n3 = malloc(sizeof(nodo));
    n3->dato = 78;
    n3->prox = NULL;
    n2->prox = n3;
    nodo* n4 = malloc(sizeof(nodo));
    n4->dato = 78;
    n4->prox = NULL;
    n3->prox = n4;

    int response = iesimo((lista*) l, 2);

    assert(response == 456);

    return 0;
}

    main.c:35:5: error: cannot convert to a pointer type
     int response = iesimo((lista*) l, 2);

В функции сборки я возвращаю длинный тип. Я хочу знать, как решить эту проблему. Спасибо!

1 Ответ

1 голос
/ 07 мая 2020
int response = iesimo((lista*) l, 2);

Вместо преобразования переданного аргумента l в указатель на lista, вам нужно использовать оператор амперсанда & для получения адреса l:

int response = iesimo(&l, 2); 
...