error: request for member data in something not a structure or union despite using arrow operator
error: request for member data in something not a structure or union despite using arrow operator
我遇到错误:请求成员数据不是结构或联合。我正在将结构 global_vals
中的结构 receiver_data
的地址传递给另一个文件中的函数。
init_func
函数接收地址作为指针。我使用箭头运算符,因为它是一个指针,但我似乎无法访问该结构。两个内存地址 &val.receiver_data
和 *ptr
是相同的所以我不太确定哪里出错了
如果有人能指出我的错误,将不胜感激。
组件分布在具有以下结构的各种源文件/头文件中。
- main.c
- func_init.c
- datatypes.c
main.c
global_vals val;
void main(void)
{
val.receiver_data.data = 10;
init_func(&val.receiver_data);
}
func_init.c
void init_func(int *ptr_data)
{
printf("%d\n", ptr_data->data);
}
datatypes.h
typedef struct Receiver {
int data;
} Receiver;
typedef struct {
Receiver receiver_data;
// truncated
} global_vals;
函数参数
void init_func(int *ptr_data)
{
printf("%d\n", ptr_data->data);
}
具有 int *
类型,即它是指向标量对象的指针。所以这个构造 ptr_data->data
是无效的,因为整数没有像 data
.
这样的数据成员
不清楚为什么函数没有像
那样声明
void init_func( Receiver *ptr_data);
另一种方法是声明和定义函数,如
void init_func(int *ptr_data)
{
printf("%d\n", *ptr_data);
}
并称其为
init_func(&val.receiver_data.data);
我希望这个函数实际上做了一些有用的事情,而不是仅仅输出一个整数。
- 编译器说:
error: request for member 'data' in something not a structure or union
编译器指向错误的确切位置:
| printf("%d\n", ptr_data->data);
| ^~
程序员思考:ptr_data
真的是结构体还是联合体?
程序员检查声明int *ptr_data
。不,不是。
我遇到错误:请求成员数据不是结构或联合。我正在将结构 global_vals
中的结构 receiver_data
的地址传递给另一个文件中的函数。
init_func
函数接收地址作为指针。我使用箭头运算符,因为它是一个指针,但我似乎无法访问该结构。两个内存地址 &val.receiver_data
和 *ptr
是相同的所以我不太确定哪里出错了
如果有人能指出我的错误,将不胜感激。
组件分布在具有以下结构的各种源文件/头文件中。
- main.c
- func_init.c
- datatypes.c
main.c
global_vals val;
void main(void)
{
val.receiver_data.data = 10;
init_func(&val.receiver_data);
}
func_init.c
void init_func(int *ptr_data)
{
printf("%d\n", ptr_data->data);
}
datatypes.h
typedef struct Receiver {
int data;
} Receiver;
typedef struct {
Receiver receiver_data;
// truncated
} global_vals;
函数参数
void init_func(int *ptr_data)
{
printf("%d\n", ptr_data->data);
}
具有 int *
类型,即它是指向标量对象的指针。所以这个构造 ptr_data->data
是无效的,因为整数没有像 data
.
不清楚为什么函数没有像
那样声明void init_func( Receiver *ptr_data);
另一种方法是声明和定义函数,如
void init_func(int *ptr_data)
{
printf("%d\n", *ptr_data);
}
并称其为
init_func(&val.receiver_data.data);
我希望这个函数实际上做了一些有用的事情,而不是仅仅输出一个整数。
- 编译器说:
error: request for member 'data' in something not a structure or union
编译器指向错误的确切位置:
| printf("%d\n", ptr_data->data); | ^~
程序员思考:
ptr_data
真的是结构体还是联合体?程序员检查声明
int *ptr_data
。不,不是。