我有这两个结构
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;
}
答案 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;
^^^^^^^^^^^^