klasse über mehrere datein verfügbar machen



  • ich habe 3 datein mit jeweils 1ner klasse drin.
    1 klasse (in der datei befinden sich auch noch mehrere strukturen) wird an die anderen beiden klassen vererbt.
    mein problem ist jedoch, dass die erbenden klassen die andere nicht kennen, was auch auf die strukturen zutrifft.
    wie kann ich die klasse, die vererbt wird, und die dortigen strukturen über mehrere includete datein verfügbar machen?



  • Hallo,

    Indem du die entsprechende Headerdatei dort inkludierst.



  • Wenn sich die Klassen in den Units gegenseitig kennen müssen, mußt Du einen Teil davon per Forward-Declaration bekannt geben



  • @ Braunstein: dann meckert der compiler, dass er die klasse schon kennt und ich kann nicht zu ende compilieren.

    Joe_M. schrieb:

    Wenn sich die Klassen in den Units gegenseitig kennen müssen, mußt Du einen Teil davon per Forward-Declaration bekannt geben

    sagt mir was, aber ich weiss jetzt nicht, wie ich das auf die klasse/strukturen richtig anwenden soll.



  • Forwarddeklaration
    http://www.cpp-tutor.de/cpp/le11/le11_02.htm#vorwaerts
    Hast du Include-Guards drin?
    http://www.schornboeck.net/ckurs/preprocessor.htm
    Ansonsten musst du uns schon etwas mehr Code zeigen.



  • Setzt Du Include-Guards ein (also ein #ifndev ... #define ... #endif-Konstukt, wie es auch in den automatisch generierten Headern verwendet wird)?

    Eine Forward-Declaration beteht nur aus einem class XYT;, vor der Deklaration der Klasse, die die Klasse XYZ kennen muß. Somit weiß der Compiler, dass es diese Klasse gibt und die Deklaration an anderer Stelle erfolgt. Den Header der Klasse XYZ inkludierst Du dann erst in der CPP-Datei.

    [EDIT] Mal wieder zu langsam...



  • Joe_M. schrieb:

    Setzt Du Include-Guards ein (also ein #ifndev ... #define ... #endif-Konstukt, wie es auch in den automatisch generierten Headern verwendet wird)?

    Eine Forward-Declaration beteht nur aus einem class XYT;, vor der Deklaration der Klasse, die die Klasse XYZ kennen muß. Somit weiß der Compiler, dass es diese Klasse gibt und die Deklaration an anderer Stelle erfolgt. Den Header der Klasse XYZ inkludierst Du dann erst in der CPP-Datei.

    [EDIT] Mal wieder zu langsam...

    zu 1. ja
    zu 2. funktioniert

    @Braunstein: danke für die links.

    ich habe jetzt noch die frage, wie das mit den Forward-Declarationen für

    typedef struct
    {
        ........
    } CANMESSAGE;
    

    und

    enum CANBauds
    {
        ......
    };
    

    aussieht.



  • Ändere bitte mal deinen Deklarationssyntax für struct zu

    struct CANMESSAGE
    {
        ........
    };
    

    Dazu sieht die Forwarddeklaration so aus

    struct CANMESSAGE;
    

    Für das enum kannst du keine Forwarddeklaration machen. Zur Not lagerst du die in eine separate Headerdatei aus.



  • es geht auch, ohne irgendwelche forward-declarationen für struct und enum.
    auf einmal wollte er den code doch compilieren.
    danke euch beiden.


Anmelden zum Antworten