C 申请会员';名称';以非结构或结合的方式

C 申请会员';名称';以非结构或结合的方式,c,struct,structure,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; i

我有两个结构

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 struct的函数,我正在尝试访问函数中的name字段,它在标题中显示了错误消息,我尝试了之前建议的所有操作,但都没有成功,函数是(不完整的):


元素
移动
为:

PokemonMove * moves;
即:

struct pokemon_move_t ** moves;
而不是:

struct pokemon_move_t * moves;
。。。它是指向结构的指针,而不是指向结构本身的指针

我想你不想要这个

您必须删除
typedef
中的
*
或结构中的
*

如果
移动
确实是指向指针的指针,则必须通过以下方式(或类似方式)访问它:

。。。这等于:

char* name= pokemon->moves[0]->name;
。。。或者,如果
移动
指向数组:

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

元素
移动
为:

PokemonMove * moves;
即:

struct pokemon_move_t ** moves;
而不是:

struct pokemon_move_t * moves;
。。。它是指向结构的指针,而不是指向结构本身的指针

我想你不想要这个

您必须删除
typedef
中的
*
或结构中的
*

如果
移动
确实是指向指针的指针,则必须通过以下方式(或类似方式)访问它:

。。。这等于:

char* name= pokemon->moves[0]->name;
。。。或者,如果
移动
指向数组:

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

我想你指的是数据成员的以下声明

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;
将是有效的

类型
pokemove
已声明为指针类型

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;
在这种情况下,这个声明

char* name= pokemon->moves->name;
将是有效的

类型
pokemove
已声明为指针类型

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

使用
pokemove移动而不是
pokemove*移动不要将指针性质隐藏在typedef后面。它会引起很多混乱,比如你自己刚刚经历过的。
char*name=(*pokemon->moves)->name使用
口袋妖怪移动而不是
pokemove*移动不要将指针性质隐藏在typedef后面。它会引起很多混乱,比如你自己刚刚经历过的。
char*name=(*pokemon->moves)->name问题是我不能编辑结构,这是课程的工作人员给我们的,我只能编辑功能,你知道我如何在不改变结构的情况下进行编辑吗?@SherazFaraj:你可以在问题中提到这个限制。问题是我不能编辑结构,它是由课程的工作人员提供给我们的,我只能编辑函数,你知道我如何在不改变结构的情况下进行编辑吗?@SherazFaraj:你可以在你的问题中提到这个限制。