Forward declarations

Discussion in 'C++' started by Carlos Martinez Garcia, Feb 16, 2006.

  1. 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.
     
    Carlos Martinez Garcia, Feb 16, 2006
    #1
    1. Advertising

  2. Carlos Martinez Garcia

    John Carson Guest

    "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;
    >
    > 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.



    struct DatosCdrGprs;

    typedef struct DatosCdrGprs
    {}DatosCdrGprs;


    --
    John Carson
     
    John Carson, Feb 16, 2006
    #2
    1. Advertising

  3. "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
     
    Ivan Vecerina, Feb 16, 2006
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. matthew polder

    namespaces and forward declarations

    matthew polder, Jul 24, 2003, in forum: C++
    Replies:
    1
    Views:
    354
    John Harrison
    Jul 24, 2003
  2. mjm
    Replies:
    3
    Views:
    395
  3. whithers
    Replies:
    4
    Views:
    376
    Sumit Rajan
    Jan 16, 2004
  4. Alan Lee
    Replies:
    5
    Views:
    359
    Rolf Magnus
    Apr 5, 2004
  5. Steven T. Hatton

    forward declarations and namespaces?

    Steven T. Hatton, Apr 27, 2004, in forum: C++
    Replies:
    6
    Views:
    3,234
    Dave Moore
    May 5, 2004
Loading...

Share This Page