I'm trying to architect some C code such that the .c file and private .h file define a rather complex structure, but a public facing header file only requires pointers to that structure type. What I tried was this:

*publicRadio.h*

```
typedef struct _radio Radio;
void radioReceive(Radio *radio, ....);

```

*privateRadio.h*

```
#include <publicRadio.h>
struct _radio {
    ...
    ...
}

```

*radio.c*

```
#include <publicRadio.h>
#include <privateRadio.h>

void radioReceive(Radio *radio, ....)
{
    ...
}

```

When I try to compile this though, I get something like

```
radio.c:91:9: error: parameter 'radio' has just a forward declaration
radio.c:90:6: error: conflicting types for 'radioReceive'
publicRadio.h:29:6: note: previous declaration of 'radioReceive' was here

```

I'm trying to emulate the pattern I've seen in other libraries that have public facing APIs that expose their structures through functions, but hide the gory details. What is the recipe one uses to accomplish that?