C4430 mit C2146



  • mh hab mir das angeguckt
    und wenn ich das richtig sehe wird die datei ordnungsgemäß eingebunden...



  • kommentier mal bitte die includes der Header, die NICHT von dir stammen aus (ich vermute Tribase.h, d3d9.h, d3dx9.h) und poste hier das, was danach aus dem präprozessor kommt. Alternativ den Inhalt von GameManager.h und Globals.h - wobei ich bei letzterem Angst um meine Zehennägel habe, klingt nach einer Sammlung globaler Variablen...



  • In GameManager.h steht nicht zufällig:

    #include "CGateway.h"
    


  • nein

    aber da steht #include "Globals.h" und da wird das gateway includet...

    allerdings hab ich auch in globals.h forward declarations für CGameManager und CGateway



  • Skym0sh0 schrieb:

    aber da steht #include "Globals.h" und da wird das gateway includet...

    Das heißt, Globals.h und CGateway.h binden sich gegenseitig ein?

    Kann nicht funktionieren, lös das auf.



  • mh ok hab ich, jetzt klappts auch

    aber ich hatte eigentlich in errinerung dass das geht...
    naja vllt von java her

    danke auf jedenfall



  • in java gibt es keine includes

    setzt dich ein wenig mit der materie auseinander, also wie das C++ übersetzungsmodell aussieht, was #include eigentlich macht. dann sollte dir schnell klar werden, dass es nicht gehen *kann*.



  • jaja mir ist schon klar dass include die angegebene datei da einfach einsetzt

    aber ich hatte in errinerung hier gelesen zu haben dass gegenseittiges inkludieren funktioniert...
    und damit sollte ja auch mein problem weg sein dann



  • Skym0sh0 schrieb:

    jaja mir ist schon klar dass include die angegebene datei da einfach einsetzt

    aber ich hatte in errinerung hier gelesen zu haben dass gegenseittiges inkludieren funktioniert...

    Denk noch mal genau nach, weshalb hier ein Widerspruch vorliegt.



  • natürlich funktioniert gegenseitiges includen.

    nur ändert es nichts daran, dass der compiler zuerst ne definition oder fwd. decl. einer klasse sehen muss, bevor man sie irgendwo verwenden kann. und je nach verwendung reicht eine fwd. decl. dann oder eben auch nicht.

    und es fällt mir jetzt auch auf die schnelle nur eine "sinnvolle" anwendung ein. nämlich wenn man dinge der übersichtlichkeit halber in mehrere header-files aufsplitten will.

    z.b. ein template und dessen definition, oder das basis-template und dazugehörende spezialisierungen.
    wenn man dann möchte dass
    a) der user jedes dieser files direkt inkludieren darf und
    b) trotzdem alle zusammengehörenden files inkludiert werden
    dann kann man gegenseitig includen.
    dabei stehen die #include dann aber in zumindest einem file am ende.

    beispiel:

    // a.hpp
    
    #pragma once
    
    template <class T> class foo { ... };
    
    #include "b.hpp"
    #include "c.hpp"
    
    // b.hpp
    
    #pragma once
    #include "a.hpp"
    
    template <> class foo<int> { ... };
    
    // c.hpp
    
    #pragma once
    #include "a.hpp"
    
    template <> class foo<short> { ... };
    

Anmelden zum Antworten