请求' name'在某种非结构或联合的东西中

时间:2016-11-27 18:55:10

标签: c struct structure

我有这两个结构

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;

我有一个函数接收pokemon结构,我试图到达函数中的名称字段,它显示标题中的错误信息,我尝试了之前建议的所有内容,它没有'工作,功能是(不完整):

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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; 
  ^^^^^^^^^^^^