Проблема с разыменованием указателей

Я получаю сообщение об ошибке при попытке присвоить значение указателю.

Я определил 2 структуры:

typedef struct {
    struct player *next; //pointers
    struct player *prev;
} player;

typedef struct {
    player onMe; //object
} field;

позже в коде я создаю экземпляр структуры "player p" и пытаюсь использовать его: fields[][] - это массив, который содержит структуры поля типа.

fields[p.x][p.y].onMe = *(p.next);
(*p.prev).next = &p.next;

в этих случаях я получаю "ошибка: разыменование указателя на неполный тип", я также пытался (&p.next), но имеет тот же результат.

fields[x][y].onMe.prev = (&p);

в этом случае я получаю "предупреждение: назначение из несовместимого типа указателя [включено по умолчанию]"

Может кто-нибудь сказать мне, что я делаю не так?

3 ответа

Решение

Вы не заявляете struct player где угодно, поэтому определение структуры неполное. Пытаться

typedef struct player_s {
    struct player_s *prev;
    struct player_s *next;
} player;

Причина в том, что struct player является неполным типом. Вы заявляете player введите с typedef, Но вы использовали struct player как его часть, которая не определена ни сейчас, ни где-либо еще.

Вы должны использовать что-то вроде

typedef struct player {
    struct player *next; //pointers
    struct player *prev;
} player;

Возможно, что вы присваиваете другой указатель struct A на массив array.onMe.
Кстати, почему вы назначаете адрес ptr другому ptr? Может быть, вы хотите назначить адрес, на который указывал ptr, другому указателю, как показано ниже:

(*p.prev).next = p.next
Другие вопросы по тегам