Проблема с разыменованием указателей
Я получаю сообщение об ошибке при попытке присвоить значение указателю.
Я определил 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