Stl Liste übergeben bzw. global



  • Hab den Fehlercode jetzt nicht abgedruckt, da er a) sehr lang ist
    b) ausschließlich alles mögliche ankreidet was normalerweise funktioniert. kann das aber gerne nachholen.



  • Hallo,

    wenn Du es denn besser weisst als Dein Compiler, warum fragst Du dann ? ;o)

    Regel: Der Compiler hat immer recht, weil er soll es ja machen. Ein fehlendes ; am Ende weisst auf falsches Includieren hin.

    So sieht man z.B. das light.h und main.h sich gegenseitig brauchen.

    Spiel mal manuell Precompiler und setze die Daten passend ein und schau ob der Compiler mit den Fehlermeldungen nicht doch recht hat.



  • Hi

    So war das natürlich nicht gemeint, sorry. 😉
    Ich konnte die Zahl der Fehlermeldungen in der Tat dadurch reduzieren, dass ich die main.h in alle Files includiert habe (auch in jene, die sie eigentlich nicht brauchen), was aber zugegebenermaßen eher das Ergebnis von ausprobieren war.

    Ich bekomme nun noch folgende Meldungen:

    application.cpp(21): warning C4267: 'return': Konvertierung von 'size_t' nach 'int', Datenverlust möglich
    test.cpp(12): fatal error C1004: Unerwartetes Dateiende gefunden
    Logfile.h(44): error C3861: 'Text': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
    main.h(29): error C2275: 'UINT': Ungültige Verwendung dieses Typs als Ausdruck
    Logfile.h(44): error C2146: Syntaxfehler: Fehlendes ',' vor Bezeichner 'Text'
    Logfile.h(41): error C2146: Syntaxfehler: Fehlendes ',' vor Bezeichner 'Text'
    test.cpp(12): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    test.cpp(11): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    test.cpp(6): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    test.h(12): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    main.h(43): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    Logfile.h(50): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    Logfile.h(29): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    Singleton.h(39): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    Singleton.h(38): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    Singleton.h(37): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    Singleton.h(29): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    Singleton.h(21): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    application.h(135): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    test.cpp(9): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    test.cpp(4): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    test.h(7): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    main.h(32): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    Logfile.h(32): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    Logfile.h(22): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    Singleton.h(34): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    Singleton.h(32): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    Singleton.h(24): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    Singleton.h(20): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    Singleton.h(12): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    Logfile.h(29): error C2143: Syntaxfehler: Es fehlt ',' vor '}'
    application.h(127): error C2143: Syntaxfehler: Es fehlt ',' vor ';'
    Logfile.h(41): error C2143: Syntaxfehler: Es fehlt ',' vor ')'
    Logfile.h(29): error C2065: 'YELLOW': nichtdeklarierter Bezeichner
    Logfile.h(41): error C2065: 'Text': nichtdeklarierter Bezeichner
    application.h(113): error C2065: 'Test': nichtdeklarierter Bezeichner
    Logfile.h(24): error C2065: 'RED': nichtdeklarierter Bezeichner
    Logfile.h(27): error C2065: 'PURPLE': nichtdeklarierter Bezeichner
    Logfile.h(25): error C2065: 'GREEN': nichtdeklarierter Bezeichner
    application.h(126): error C2065: 'f_NearPlane': nichtdeklarierter Bezeichner
    application.h(125): error C2065: 'f_FieldofView': nichtdeklarierter Bezeichner
    application.h(127): error C2065: 'f_FarPlane': nichtdeklarierter Bezeichner
    Logfile.h(26): error C2065: 'BLUE': nichtdeklarierter Bezeichner
    application.h(113): error C2059: Syntaxfehler: '>'
    Logfile.h(44): error C2059: Syntaxfehler: '...'
    Singleton.h(41): error C2039: 'm_pSingleton': Ist kein Element von 'operator``global namespace'''

    Wie gesagt, bis auf die Warnung ganz oben lässt sich das Programm fehlerfrei ausführen, außer wenn ich eben versuche eine Liste in einem h-File zu erzeugen.

    Die Test.h entspricht der light.h von meinem ersten Post.

    Die anderen Files kann ich zeigen wenn es gewünscht wird.

    Ich bin zugegeben wirklich am Ende meines Lateins, da es wirklich nur in diesem einen Fall Probleme gibt



  • Ne, das hast Du falsch verstanden.

    light.h:

    #include "main.h"

    ---

    main.h

    #include "light.h"

    Über dieses Konstrukt sollst Du Dir mal gedanken machen.

    [edit] liste durch light ersetzt



  • Hm

    Also ich dachte dies folgendermaßen:

    In der Main werden z.B. die Direct X Files inkludiert. Deshalb muss ich die main.h in der light. h inkludieren, sonst hab ich dort ja keinen Zugriff auf besagt Elemente (und ich möchte ja nicht in jeder Klasse unmengen gleicher Files inkludieren)

    umgekehrt kann ich nur dann " Light" Objekte erzeugen, wenn ich die light.h kenne.

    Irgendwie/wo hab ich mich verannt oder?



  • falcon schrieb:

    Irgendwie/wo hab ich mich verannt oder?

    Ja in einen Teufelskreis ... 🙂



  • ja, hast Du.

    An der Stelle, an der light.h die main.h includiert, ist von light rein garnichts bekannt. Deswegen wirft Dir der Compiler massig Fehlermeldungen um die Ohren das er Light nicht in main.h kennt.

    Hier hilft strikte Trennung von definition und deklaration sowie forward deklarationen und Zeiger weiter.

    (Hab mir Dienen Source nicht ins letzte Detail angesehen).

    Beispiel:

    a.h

    #include "b.h"
    
    class a
    {
    
    };
    

    b.h

    #include "b.h"
    
    class b
    {
       a class;
    };
    

    Der Precompiler baut daraus:

    class b
    {
       a class;
    };
    
    class a
    {
    
    };
    

    Bei der Deklaration von b ist a unbekannt.



  • Ja, allerdings, das hast du. Wenn ich mir die "main.h" ansehe, die du dort oben hast, braucht die selber deine "Light.h" überhaupt nicht. Erst das Hauptprogramm muß sich darum kümmern, deine Hilfsheader einzubinden.

    (und ansonsten ist es wohl günstiger, wenn du die DirectX-Header nur dort einbindest, wo sie wirklich benötigt werden - auch wenn's mehr Schreibarbeit bedeutet)



  • Hinzu zu fügen wäre:

    Daraus, das Du nur das includierst was Du wirklich benötigst (und oft lässt sich im Header mit fwd deklaration arbeiten), folgt:

    1. Weniger Fehlerquellen
    2. Weniger abhängigkeiten und dadurch kürzere Compilerzeiten wenn sich etwas ändert.



  • Ok

    So langsam (sehr langsam) wird mir klar, wo die Problematik liegt.

    Wird wohl noch einige Zeit dauern, bis ich das sinnvoll gelöst hab, aber ich weiß nun ja wo ich ansetzten muss.

    Vielen Dank an alle, vor Allem natürlich Knuddlbaer, für die Mühe.

    Gruß

    falcon


Anmelden zum Antworten