Vorwärtsdeklaration bei structs



  • Hallo Leute,

    ich möchte eine Vorwärtsdeklaration für folgenden Datentyp vornehmen:

    // externe (nicht meine) Header Datei.
    struct tt3d {
           double a[3];
           double b[3];   
           double c[3];
           Rot3d R;
           double d; 
           double e[7*7];
    };
    
    typedef struct tt3d TT3D;
    

    anschließend möchte ich diese Header Datei nur in der cpp inkludieren weil ich in meiner Header Datei lediglich einen Zeiger darauf habe.

    Wie macht man in diesem Fall eine Vorwärtsdeklaration? Folgendes funktionierte nicht.

    struct TT3D;
    

    Wo macht es Sinn Structs so zu verschachteln? Kann diese Datei leider nicht verändern weil sie von außerhalb kommt.



  • Was war denn das Problem? Für mich sieht das gangbar aus (natürlich unter der prämisse, dass die vorwärtsdeklaration "tt3d" und nicht "TT3D" lautete).



  • Beides in den Header:

    struct tt3d;//forward-deklaration
    
    typedef tt3d TT3D;//komisches typedef
    

    edit: Im typedef das struct gelöscht, struct braucht man in C++ nicht bei der Verwendung eines structs. Deshalb ist der ganze typedef auch eher nicht nötig.



  • Decimad schrieb:

    Was war denn das Problem? Für mich sieht das gangbar aus (natürlich unter der prämisse, dass die vorwärtsdeklaration "tt3d" und nicht "TT3D" lautete).

    ok das mit "tt3d" hat funktioniert, danke. Warum verschachtelt man nun solche Typen?



  • Das ist ein C-Relikt, falls du auf das typedef hinaus willst. In C sind Strukturnamen nicht automatisch Typnamen gewesen.
    💩



  • Früher mußte man in C bei der Verwendung von structs IMMER struct schreiben.
    Also

    struct tt3d {
    ...
    };
    
    void f(struct tt3d* a,struct tt3d* b){
    ...
    

    Jetzt un C++ ist das nicht mehr nötig.

    struct tt3d {
    ...
    };
    
    void f(tt3d* a,tt3d* b){
    ...
    

    Aber in C konnte man das struct bei Verwendung auch loswerden!

    struct tt3d {
    ...
    };
    typedef struct tt3d TT3D;
    
    void f(TT3D* a,TT3D* b){
    ...
    


  • Super! Jetzt verstehe ich es. Dankeschön an alle.

    Ist mein vorgehen möglichst viel in der cpp zu inkludieren und in der h durch Vorwärtsdeklarationen zu ersetzen überhaupt sinnvoll?



  • Wenn nur wenige User-Module oder nur die Implementierung die Typdefinitionen brauchen, ist das ein gangbarer Weg.
    Für zirkuläre Abhängigkeiten kann das sogar der einzige Weg sein.



  • neuling123 schrieb:

    Ist mein vorgehen möglichst viel in der cpp zu inkludieren und in der h durch Vorwärtsdeklarationen zu ersetzen überhaupt sinnvoll?

    Nein. Ist übertrieben.
    Ja, Headers schon schlank halten. Fette Headers compilieren langsamer.
    Aber Du übertreibst und haust damit zu viel Arbeitszeit weg. Lieber 50€ mehr für den Prozessor ausgeben.
    Pro struct oder Klasse eine Header-Datei und sparsam zu inkludieren, was man braucht, bringt am meisten Compilegeschwindigkeitsgewinn und ist auch angenehm für die Übersicht.



  • Super! Damit bin ich vollkommen glücklich. Danke an alle. 👍


Log in to reply