zu vor deklarierte Strukturen nich erkannt



  • folgendes Problem:

    ich hab eine main Datei, in der ist nichts anderes als eine main funktion,
    die sofort wieder beendet
    und die include anweisung für eine 2. Datei

    allerdings meckert er nun beim compilieren über nicht erkannte Datentypen
    in Funktions-Prototypen der 2.Datei
    in diesen Funktions-Prototypen werden Strukturen als Parameter benutzt (über die wird gemeckert),
    die direkt davor auch als Prototyp stehen

    darf man etwa von Strukturen keine Prototypen machen?
    oder wo liegt das Problem?



  • doch darf man glaub schon, poste doch man den code.

    mfg blan



  • Es gibt keine Prototypen für Strukturen. Meinst du Vorwärtsdeklarationen?

    BTW

    1. minimalen Code posten
    2. Fehlermeldungen posten
    3. allgemein sich nicht jedes Detail aus der Nase ziehen lassen


  • Sorry, dachte das wär allgemein so das man das nich darf
    deswegen hab ich keinen Code gepostet

    Die Fehler-Meldungen stehen an der vom Compiler angegebenen Stelle
    nicht unbedingt bei der Ursache

    main-datei:

    #include "Datei2.cpp"
    
    int main()
    {
      return(0);
    }
    

    2.Datei:

    //Prototypen
    
    struct vertex2d;
    struct object2d;
    vertex2d middle(object2d o); //parse error before vertex2d, parse error before object2d
    
    //Funktionskörper
    
    struct vertex2d
    {
      double x;
      double y;
    };
    
    struct object2d
    {
      vertex2d *v;
      int length;
      char color;
    };
    
    vertex2d middle(object2d o)
    {
      //irrelevant
    }
    


  • dann steck den funktionsprototypen eben unter die struturdefinitionen.



  • hab ich jetzt auch versucht
    macht aber keinen Unterschied
    er findet die ganzen Strukturen immernoch nicht

    komisch...



  • in C++ ist das irrelevant, aber in C++ gibt es einen Unterschied zwischen "struct xyz" und "xyz" - also entweder du verwendest den kompletten Typnamen oder du nutzt typedef's:

    //Möglichkeit a:
    struct vertex2d;
    struct object2d;
    
    struct vertex2d middle(struct object2d o);
    ...
    
    //Möglichkeit b:
    typedef struct _vert vertex2d;
    typedef struct _obj object2d;
    
    vertex2d middle(object2d);
    
    struct _vert
    {...};
    struct _obj
    {...};
    


  • oder:

    //Prototypen 
    
    typedef struct _vertex2d 
    { 
      double x; 
      double y; 
    } vertex2d;
    
    typedef struct _object2d 
    { 
      vertex2d *v; 
      int length; 
      char color; 
    } object2d;
    
    vertex2d middle(object2d o); //parse error before vertex2d, parse error before object2d 
    
    //Funktionskörper 
    
    vertex2d middle(object2d o) 
    { 
      //irrelevant 
    }
    


  • http://c-faq.com/struct/typedef.html

    Edit: Ich bin heute einfach langsam...



  • wusst ich noch gar nich
    werd ich gleich mal ausprobieren
    is weil ich meißtens C++ geproggt hab



  • also bei der typedef Mehtode meckert er:
    warning: useless keyword or type name in empty declaration
    (in der Zeile in der ich typedef struct ... aufrufe)

    und wenn ich immer struct davorschreibe (was ich aber eigentlich lieber bleiben lassen will)
    meint er bei
    struct vertex2d middle(struct object2d o);
    warning: parameter has incomplete type



  • Zeig doch mal deinen jetzigen Code. Und welchen Compiler nutzt du?



  • ich benutz dev-c++, also mingw
    so sieht das ganze aus:

    typedef struct vertex2d;
    typedef struct object2d;
    vertex2d middle(object2d o);
    
    struct vertex2d
    {
      double x;
      double y;
    };
    struct object2d
    {
      vertex2d *v;
      int length;
      char color;
    };
    vertex2d middle(object2d)
    {
    }
    


  • A) Wenn Du C++ compilierst brauchst Du kein typedef.
    😎 Forward-Deklaration funktioniert nur solange über den Typ nichts genaueres bekannt sein muss als der Name.

    struct vertex2d;
    struct object2d;
    vertex2d middle(object2d o);
    
    struct vertex2d
    {
      double x;
      double y;
    };
    struct object2d
    {
      vertex2d *v;
      int length;
      char color;
    };
    vertex2d middle(object2d)
    {
    }
    

Anmelden zum Antworten