gleiche struct in struct



  • Also, ich habe folgendes (Anfänger-)Problem. Ich habe eine struct, die ich mit typedef initialisiere. Es wäre jedoch sehr praktisch, wenn eine Variable der Struktur die Struktur selbst ist, weil ich mit diesen Strukturen eine Art Baum erstelle. Also so z.B.:

    typedef tagTEST
    {
        int bla1;
        int bla2;
        TEST bla3; // !!!
    } TEST;
    
    ...
    
    TEST blabla[4];
    


  • Was spricht gegen Pointer?



  • Verkettete Listen basieren eigentlich auch vollständig auf diesem Prinzip.



  • Wenn du einen rekursiven Datentyp hast, beachte mal folgendes:

    Test beinhaltet eine Variable vom Typ Test, welche eine Variable vom Typ Test beinhaltet, welche eine Variable vom Typ Test beinhaltet, welche eine Variable vom Typ Test beinhaltet, welche eine Variable vom Typ Test beinhaltet, welche eine Variable vom Typ Test beinhaltet, welche eine Variable vom Typ Test beinhaltet, welche eine Variable vom Typ Test beinhaltet, welche eine Variable vom Typ Test beinhaltet, welche eine Variable vom Typ Test beinhaltet,...

    irgendwie ist das ungünstig



  • Herr-Vorragend schrieb:

    typedef tagTEST
    {
        int bla1;
        int bla2;
        TEST bla3; // !!!
    } TEST;
    
    ...
    
    TEST blabla[4];
    

    Da fehlt noch struct nach typedef.



  • Selbst bei Zeigern muss er entweder weg vom veralteten typedef struct und hin zu C++...

    struct Bla
    {
        Bla* lebensabschnittsgefaehrte;
    };
    
    Bla gehtAuchOhneTypedef;
    

    ...oder tagBLA* als Typ für den Zeiger nehmen.



  • @Herr-Vorragend
    Das was du willst geht so nicht. Wie Shade schon andeutet, erzeugst du eine unendliche Kaskade und der Compiler weiss nicht wo das Ende ist.

    Die wohl gängiste Methode für das Problem sind Zeiger.

    C Style

    typedef struct tagTEST
    {
        int bla1;
        int bla2;
        tagTEST* bla3;
    } TEST;
    

    C++ Style

    struct TEST
    {
        int bla1;
        int bla2;
        TEST* bla3;
    };
    


  • alles klar, danke, mal sehn, wie sich das einbauen lässt...


Log in to reply