如何让typedef结构跨多个文件文件?错误:无效使用未定义类型' struct data'

时间:2018-04-15 22:18:18

标签: c function struct typedef

main.c文件中的struct声明。我已声明函数原型但未显示。

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(" %3d\t %.0f\t %.0f\t  %.0f\n",c, data[c].tp, data[c].tf, data[c].tt);
   }
}

错误如下: |错误:无效使用未定义的类型&#39; struct data&#39; |

该功能本身完美无缺/我在主内部进行了测试。只有当我在functions.c中使用它时它才起作用。

1 个答案:

答案 0 :(得分:3)

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

// 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文件中你必须包含标题

<强>的main.c

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

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


  // for example
  reactorOutput(reactorOne);

  //other stuff
}

<强> functions.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);
   }
}

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