Connecting Tech Pros Worldwide Forums | Help | Site Map

Forward declarations

Carlos Martinez Garcia
Guest
 
Posts: n/a
#1: Feb 16 '06
Hi all:

I usually make forward declarations in headers. Something like this:

class MyClass;

Now, I need a reference to a type defined like this (traditional C Style):

typedef struct {


} DatosCdrGprs;

In my header I have a declaration:

class DatosCdrGprs;

but compiler says me there is a conflict between types "struct
DatosCdrGprs" (in my header file, at the line where is forward
declaration), and "typedef struct DatosCdrGprs DatosCdrGprs" (in the
file where is that type).

I tried also with forward declarations like:
struct DatosCdrGprs;
typedef struct DatosCdrGprs;
typedef struct DatosCdrGprs DatosCdrGprs;

but I always get errors.

¿How can I make the forward declaration?

Thanks in advance.

Ivan Vecerina
Guest
 
Posts: n/a
#2: Feb 16 '06

re: Forward declarations


"Carlos Martinez Garcia" <cmg250@nospam.tid.es> wrote in message
news:dt1jcr$84b3@news.hi.inet...
: Hi all:
:
: I usually make forward declarations in headers. Something like this:
:
: class MyClass;
:
: Now, I need a reference to a type defined like this (traditional C
Style):
:
: typedef struct {
:
:
: } DatosCdrGprs;
Ah, the good old C idiom.
This defines DatosCdrGprs as an 'alias' to the anonymous
struct being defined.

: In my header I have a declaration:
:
: class DatosCdrGprs;
:
: but compiler says me there is a conflict between types "struct
: DatosCdrGprs" (in my header file, at the line where is forward
: declaration), and "typedef struct DatosCdrGprs DatosCdrGprs" (in the
: file where is that type).
Yes, this unfortunately won't work.
In C, struct names are in their own "namespace" (not in the C++
meaning of the word), independent from typedefs.
So the following code is legal in C:
typedef int S;
struct S { int a; };
void f( S i, struct S j ); // two different param types
Even though the previous is not legal in C++, C++ does
partially inherit this behavior...

: I tried also with forward declarations like:
: struct DatosCdrGprs;
: typedef struct DatosCdrGprs;
: typedef struct DatosCdrGprs DatosCdrGprs;
:
: but I always get errors.
:
: ¿How can I make the forward declaration?

A typedef cannot be forward-declared.
So you need to give a name to the struct :

Definition:
typedef struct DatosCdrGprs_struct {


} DatosCdrGprs;

Equivalent forward-declaration:
typedef struct DatosCdrGprs_struct DatosCdrGprs;



Ivan
--
http://ivan.vecerina.com/contact/?subject=NG_POST <- email contact form
Brainbench MVP for C++ <> http://www.brainbench.com


John Carson
Guest
 
Posts: n/a
#3: Feb 16 '06

re: Forward declarations


"Carlos Martinez Garcia" <cmg250@nospam.tid.es> wrote in message
news:dt1jcr$84b3@news.hi.inet[color=blue]
> Hi all:
>
> I usually make forward declarations in headers. Something like this:
>
> class MyClass;
>
> Now, I need a reference to a type defined like this (traditional C
> Style):
> typedef struct {
>
>
> } DatosCdrGprs;
>
> In my header I have a declaration:
>
> class DatosCdrGprs;
>
> but compiler says me there is a conflict between types "struct
> DatosCdrGprs" (in my header file, at the line where is forward
> declaration), and "typedef struct DatosCdrGprs DatosCdrGprs" (in the
> file where is that type).
>
> I tried also with forward declarations like:
> struct DatosCdrGprs;
> typedef struct DatosCdrGprs;
> typedef struct DatosCdrGprs DatosCdrGprs;
>
> but I always get errors.
>
> ¿How can I make the forward declaration?
>
> Thanks in advance.[/color]


struct DatosCdrGprs;

typedef struct DatosCdrGprs
{}DatosCdrGprs;


--
John Carson


Closed Thread