Как скопировать содержимое одного указателя, расположенного внутри массива структур, в другой указатель - PullRequest
0 голосов
/ 21 января 2019

У меня есть следующие списки, одна из упаковок, сделанных из соединенных конструкций, одна из грузовиков, сделанных из статического массива.

typedef struct
{
    int id_pack;
    int weight_kg;
    int value;
    int priority;           //low 0, high 1
    struct pack* next;
} pack;

typedef struct pack head;  //declaring a struct head of type pack which is the head of a list of packs

typedef struct
{
    int id_truck;
    head* p_head;            //pointer to the list of packs of each truck
} truck;

int main()
{
    truck dogana[N];        //list of trucks made with a static array
}

Теперь я хочу создать функцию, которая проверяет, является ли приоритет хотя бы одной упаковки в списке упаковок первого грузовика высоким приоритетом (1). Чтобы сделать это, я подумал о создании временного указателя, чтобы не потерять ссылку на заголовок списка пакетов (он мне нужен для других вещей, которые я должен делать внутри функции); это моя функция.

void uscita_dogana (truck dogana[])
{
    head* temp;
    temp = dogana[0].p_head; // I use temp to avoid losing the head 

    while (temp != NULL)   //cicle to run trough the packs
    {
        if (temp->priority == 1) //check the priority of the pack
        {
           //INSTRUCTIONS
        }
    }
}

Теперь компилятор выдает ошибку при temp-> priority == 1 который говорит "разыменование указателя на неполный тип" head {aka struct pack};

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

Извините за общую путаницу, английский не мой родной язык, и я только начал кодировать. Заранее спасибо!

1 Ответ

0 голосов
/ 21 января 2019

Вы определили тип pack как псевдоним для анонимной структуры (обратите внимание, что у вас нет идентификатора после ключевого слова struct в typedef struct { ... } pack.

Когда вы позже определите

typedef struct pack head;

тогда вы имеете в виду struct pack, который еще не был определен. Компилятор отметит это как неполный тип, так что head также будет неполным типом. Вот почему temp->priority с temp типа head неизвестно.

запись

typedef pack head;

и оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...