c语言 - 如何让 typedef 结构在多个文件文件上工作?错误:未定义类型'struct data'的使用无效



我的main.c文件中的结构声明。我声明了函数原型,但没有显示。

typedef struct data
{
int t;
float tp, tf, tt;
} reactorData;

int main()
{
reactorData reactorOne[21];
//other stuff
}

这是在我的 function.c 文件中给我错误的函数。特别是在 printf() 语句中。

typedef struct data reactorData; //this is what I have up top

void reactorOutput(reactorData  * data)
{
int c;
for (c=0;c<21;c++)
{
printf(" %3dt %.0ft %.0ft  %.0fn",c, data[c].tp, data[c].tf, data[c].tt);
}
}

错误如下: |错误:未定义类型"结构数据"的使用无效|

该功能本身运行良好/我已经在 main 中对其进行了测试。只有当我在 functions.c 中拥有它时,它才不起作用。

必须在不同编译单元之间共享的新结构和类型定义最好放在头文件中:

// mystructh.h
#ifndef MYSTRUCT_H
#define MYSTRUCT_H
typedef struct data
{
int t;
float tp, tf, tt;
} reactorData;
void reactorOutput(reactorData  * data);
// other stuff
#endif

然后在其他 C 文件中,您必须包含标头

主.c

#include <stdio.h>
#include "mystruct.h"
int main(void)
{
reactorData reactorOne[21];

// for example
reactorOutput(reactorOne);
//other stuff
}

函数.c

// functions.c
#include "mystruct.h"
void reactorOutput(reactorData  * data)
{
int c;
for (c=0;c<21;c++)
{
printf(" %3dt %.0ft %.0ft  %.0fn",c, data[c].tp, data[c].tf, data[c].tt);
}
}

您的版本的问题在于struct data仅在main.c中定义。 当编译器编译functions.c时,它不知道struct data是什么。 这就是为什么您必须实时使用上面显示的头文件。

相关内容

  • 没有找到相关文章

最新更新