1

我面临一个错误:请求成员数据不是结构或联合。我将结构receiver_data中结构的地址传递global_vals给另一个文件中的函数。

init_func函数接收地址作为指针。我使用了箭头运算符,因为它是一个指针,但我似乎无法访问该结构。两个内存地址&val.receiver_data*ptr相同,所以我不太确定哪里出了问题

如果有人能指出我的错误,将不胜感激。

这些组件被拆分为具有以下结构的各种源/头文件。

  • 主程序
  • func_init.c
  • 数据类型.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);
}

数据类型.h

typedef struct Receiver {
    int data;
} Receiver;
    
typedef struct {
    Receiver receiver_data;
    // truncated
} global_vals;

4

2 回答 2

1

功能参数

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);

我希望这个函数实际上做一些有用的事情,而不是仅仅输出一个整数。

于 2021-03-03T11:42:01.573 回答
0
  • 编译器说:

错误:在不是结构或联合的东西中请求成员“数据”

  • 编译器指向错误的确切位置:

    |     printf("%d\n", ptr_data->data);
    |                            ^~
    
  • 程序员想:ptr_data真的是结构还是联合?

  • 程序员检查声明int *ptr_data。不它不是。

于 2021-03-03T11:43:36.593 回答