/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Gensidig referende .h filer
Fra : Mads


Dato : 26-09-06 14:56

Hej

Jeg har to .h filer der gensidig referere til typer i hinanden:

-----foo.h-----
#ifndef FOO_H
#define FOO_H

typedef struct { ... } foo_t;

void something(bar_t *arg1);

#endif
-----------------

-----bar.h-----
#ifndef BAR_H
#define BAR_H

typedef struct { foo_t var1 ... } bar_t;

#endif
-----------------

Når jeg compiler med gcc får jeg fejlen:
foo.h: error: expected ')' before '*' token
i linien "void something...".

Kan man lave ovenstående uden at samle type definitionerne i én fil?

Venlig hilsen
Mads


 
 
Mogens Hansen (26-09-2006)
Kommentar
Fra : Mogens Hansen


Dato : 26-09-06 18:14

>
> "Mads" <mads.tandrup@gmail.com> wrote in message
> news:1159278968.478468.142660@d34g2000cwd.googlegroups.com...
> Hej
>
> Jeg har to .h filer der gensidig referere til typer i hinanden:
>
> -----foo.h-----
> #ifndef FOO_H
> #define FOO_H
>
> typedef struct { ... } foo_t;
>
> void something(bar_t *arg1);
>
> #endif
> -----------------
>
> -----bar.h-----
> #ifndef BAR_H
> #define BAR_H
>
> typedef struct { foo_t var1 ... } bar_t;
>
> #endif
> -----------------
>
> Når jeg compiler med gcc får jeg fejlen:
> foo.h: error: expected ')' before '*' token
> i linien "void something...".
>
> Kan man lave ovenstående uden at samle type definitionerne i én fil?

Ja
Der er mange muligheder:

1)
Lav en forward erklæring af bar_t i "foo.h":
struct bar_t;

void something(struct bar_t* arg1);

2)
Flyt erklæringen af "void something(bar_t* arg1)" til "bar.h"

3)
Flyt erklæringen af "void something(bar_t* arg1)" til "something.h", der så
inkluderer "bar.h"



Venlig hilsen

Mogens Hansen



Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste