Probleme mit include-Kette



  • Hi,

    ich habe ein Programm was folgendermassen aufgebaut ist:

    dateiA.h
    dateiB.h (includes dateiA.h)
    dateiC.h (includes dateiB.h)

    Jetzt benötige ich die Klasse die in Datei C definiert wurde in der Datei A. Einfach includen funktioniert ja nicht weil dann die Datei praktisch 2 Mal im Code vorkommt und dann in dateiC die Klasse die in DateiA definiert wurde nicht mehr findet (Zumindest behauptet der Compile das). Irgendwie sitz ich jetzt mit einem Brett vor dem Kopf davor und hab keine Ahnung was ich machen soll (wahrscheinlich ist die Lösung wie immer ganz einfach und ich bin nur zu doof sie zu finden)



  • google mal nach includeguards und nach forward declaration
    Mit den beiden sollten deine Probleme gelöst werden können 🙂

    Wenn du dich dann etwas eingelesen hast gibts zur Übung folgenden netten Artikel:
    http://www.gotw.ca/gotw/007.htm



  • Okay, soweit ich das jetzt kapiert hab muss ich dann in DateiA.h an den Anfang eine Forward Declaration setzen mit:

    class C;
    

    Dann bekomm ich aber folgenden Fehler bim Compilieren:

    /home/stefan/cpp/openwaters/src/framelistener.cpp:107: error: invalid use of incomplete type 'struct C'
    /home/stefan/cpp/openwaters/src/framelistener.h:14: error: forward declaration of 'struct C'
    

    Ich benutze die Klasse C dabei lediglich als Pointer für eine if-Schleife in etwa so:

    if (C->Variable == 1)
    


  • mit C->Variable greifst du auf ein Element von C zu, deshalb muss die Klasse zu dem zeitpunkt schon vollständig definiert sein. Der Witz ist, dass du im Header von A nur die forward-deklaration von C machst, in der .cpp aber den Header von C (und damit die Definition von C) einbindest.



  • Wenn ich das so mache kompiliert das Programm zwar, stürzt aber beim Aufruf der Variablen ab. 😞



  • HorstXY schrieb:

    Wenn ich das so mache kompiliert das Programm zwar, stürzt aber beim Aufruf der Variablen ab. 😞

    Was wiederum ein Fehler ist (vermutlich Zugriff auf uninitialisierte Variable oder NULL-Wert) der nichts mit dem ursprünglichen zu tun hat.



  • Ups, sorry ich war wohl so überwältigt davon dass es kompiliert dass ich glatt das programmieren vergessen hab. *Gegen den Schädel hau*


Anmelden zum Antworten