Forward declarations

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Carlos Martinez Garcia

    #1

    Forward declarations

    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

    #2
    Re: Forward declarations

    "Carlos Martinez Garcia" <cmg250@nospam. tid.es> wrote in message
    news:dt1jcr$84b 3@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_st ruct {


    } DatosCdrGprs;

    Equivalent forward-declaration:
    typedef struct DatosCdrGprs_st ruct DatosCdrGprs;



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


    Comment

    • John Carson

      #3
      Re: Forward declarations

      "Carlos Martinez Garcia" <cmg250@nospam. tid.es> wrote in message
      news:dt1jcr$84b 3@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


      Comment

      Working...