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

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。不,不是。