2016-11-27 6 views
0

у меня есть это две структурычлен запрос «имя» в чем-то не структуры или объединения

typedef struct pokemon_move_t { 
char* name; 
PokemonType type; 
int power_points, max_power_points; 
int strength; 
} *PokemonMove; 

typedef struct pokemon_t { 
char* name; 
PokemonType type; 
int experience; 
int health_points; 
PokemonMove* moves; 
int number_of_moves, max_number_of_moves; 
} *Pokemon; 

и у меня есть функция, которая получает покемон-структуру и я пытаюсь достигнуть имя поля в функции и он показывает мне сообщение об ошибке в названии, я попробовал все, что предложенное раньше, и это не сработало, то функция (не полная):

int pokemonMoveName(Pokemon pokemon){ 
char* name= pokemon->moves->name; //the error is in this line 
return 0; 
} 
+2

Использование 'PokemonMove движется,' 'вместо PokemonMove * ходов,' – Valeriy

+1

Не скрывайте указатель природы позади ЬурейеЕ. Это вызывает много путаницы, например, вы только что испытали для себя. –

+0

'char * name = (* pokemon-> move) -> name;' – BLUEPIXY

ответ

3

элемент moves является:

PokemonMove * moves; 

Что:

struct pokemon_move_t ** moves; 

И не:

struct pokemon_move_t * moves; 

... это указатель на указатель на структуру, а не к самой структуре.

Я думаю, что вы этого не хотите!

Либо вы должны удалить * по адресу typedef или * в структуре.

Если moves действительно указатель на указатель вы будете иметь доступ к этому следующим образом (или аналогичный):

char* name= (*(pokemon->moves))->name; 

..., которая равна:

char* name= pokemon->moves[0]->name; 

... или, если moves указывает на массив:

char* name= pokemon->moves[index]->name; 
+0

проблема в том, что я не могу редактировать структуры, которые были предоставлены нам персоналом курса, и все, что я могу редактировать, это функции, вы знаете, как я могу это сделать без изменения структур? –

+0

@SherazFaraj: вы могли бы упомянуть об этом ограничении в своем вопросе. – usr2564301

0

Я думаю, что вы имеете в виду следующее Заявление члена

typedef struct pokemon_t { 
char* name; 
PokemonType type; 
int experience; 
int health_points; 
PokemonMove moves; 
^^^^^^^^^^^^^^^^^ 
int number_of_moves, max_number_of_moves; 
} *Pokemon; 

данных В данном случае это утверждение

char* name= pokemon->moves->name; 

будет действительным.

Тип PokemonMove уже объявлен как тип указателя.

typedef struct pokemon_move_t { 
char* name; 
PokemonType type; 
int power_points, max_power_points; 
int strength; 
} *PokemonMove; 
    ^^^^^^^^^^^^ 

 Смежные вопросы

  • Нет связанных вопросов^_^