Starch Wars
Starch Wars

Reputation: 41

How to get a typedef struct to work across multiple files files? error: invalid use of undefined type 'struct data'

The struct declaration in my main.c file. I have the function prototype declared but not shown.

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


int main()
{
  reactorData reactorOne[21];

  //other stuff
}

This is the function giving me errors in my function.c file. Specifically in the printf() statement.

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

The error reads: |error: invalid use of undefined type 'struct data'|

The function itself works perfectly fine/ I've tested it within main. Its only when I have it in functions.c it doesn't work.

Upvotes: 1

Views: 2482

Answers (1)

Pablo
Pablo

Reputation: 13600

New structs and type definition that must be shared across different compile units are best placed in a header file:

// 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

then in the other c files you have to include the header

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

The problem with your version is that struct data is only defined in main.c. When the compiler compiles functions.c, it doesn't know what struct data is. That's why you have to use header files live shown above.

Upvotes: 5

Related Questions