"Carlos Martinez Garcia" <> wrote in message
news:dt1jcr$...
: 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