Слева от «.Position» должен быть класс/структура/объединение

typedef struct {
    unsigned short int Position; // << That's what i'm trying to change!
    unsigned short int OldPosition;
} Turn_s;

struct Turn_sMap{
    Turn_s *Turn;
    Turn_sMap *NextTurn;
};

New = new Turn_sMap;
New->Turn = new Turn_s;

New->Turn.Position = 0; // Already tried (New->Turn).Position = 0;

Почему я получаю эту ошибку компиляции? Я не получаю доступ к структуре Turn внутри структуры New, которая, в свою очередь, имеет член с именем Position? Или typedef путает тип структуры с каким-то безумием указателя?? Помогите пожалуйста, я потерялся! ):


person Délisson Junio    schedule 10.06.2012    source источник


Ответы (2)


Объявление Turn_s *Turn; делает Turn типом указателя. Чтобы получить доступ к объектам-членам, вам нужно использовать оператор ->. Пытаться:

New->Turn->Position = 0;
person dirkgently    schedule 10.06.2012

Turn_sMap::Turn — это указатель. Вам нужно разыменовать его:

New->Turn->Position = 0; 

Кроме того, вы не должны использовать typedef struct в C++. Просто объявите структуры:

struct Turn_s {
    unsigned short int Position; // << That's what i'm trying to change!
    unsigned short int OldPosition;
};

Turn_s a;
foo(a);
person mfontanini    schedule 10.06.2012
comment
Хотя мне пришлось использовать его, чтобы не размещать структуры повсюду... Спасибо! - person Délisson Junio; 10.06.2012
comment
Это происходит в C, а не в C++: D - person mfontanini; 10.06.2012