如何让 typedef 结构跨多个文件工作?错误:未定义类型“结构数据”的使用无效

Sta*_*ars 1 c struct typedef function

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

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


int main()
{
  reactorData reactorOne[21];

  //other stuff
}
Run Code Online (Sandbox Code Playgroud)

这是在我的 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(" %3d\t %.0f\t %.0f\t  %.0f\n",c, data[c].tp, data[c].tf, data[c].tt);
   }
}
Run Code Online (Sandbox Code Playgroud)

错误内容为:|错误:未定义类型“结构数据”的使用无效|

该函数本身工作得很好/我已经在 main 中测试了它。只有当我将它放在functions.c 中时它才不起作用。

Pab*_*blo 5

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

// 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
Run Code Online (Sandbox Code Playgroud)

然后在其他c文件中你必须包含头文件

主程序

#include <stdio.h>
#include "mystruct.h"

int main(void)
{
  reactorData reactorOne[21];


  // for example
  reactorOutput(reactorOne);

  //other stuff
}
Run Code Online (Sandbox Code Playgroud)

函数.c

// functions.c
#include "mystruct.h"

void reactorOutput(reactorData  * data)
{
   int c;
   for (c=0;c<21;c++)
   {

    printf(" %3d\t %.0f\t %.0f\t  %.0f\n",c, data[c].tp, data[c].tf, data[c].tt);
   }
}
Run Code Online (Sandbox Code Playgroud)

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