Globale Objekte!!!!



  • Ich habe folgendes Problem.
    Ich habe eine Fensterbasierte Anwendung mit dem Assistenten erstellt.
    Ich verwende die in daten.h/.cpp deklarierten und initialisierten, um ein in OnNew() aufgerufenes Fenster bzw. die Werte, die der Benutzer eingibt in einem solchen Daten-Objekt abzuspeichern. das klappt soweit ganz gut.
    jetzt habe ich aber das Problem, dass ich meine grafische Ausgabe, nachdem die Funktion OnOk aufgerufen wurde, in der Funktion OnDraw untergebracht habe.
    Nun habe ich mein Objekt, in dem die Benutzereingaben stehen und die Funktion, in der die Daten aus eben diesem Objekt ausgewertet und ausgegeben werden soll.
    Wie bekomme ich hier die verknüpfung???
    wenn ich das Objekt Daten in daten.cpp global mache, dann kann ich zwar (in IWPlotView.cpp ) über die
    autovervollständigung auf die daten des objektes zugreifen
    (z.B.:object->(autovervollständigung)), allerdings meckert der compiler.
    was mache ich falsch????
    habe ich mein objekt an der falschen stelle global gemacht/initialisiert???

    Im voraus vielen Dank!



  • 😕 😕

    Dein daten-obejkt ist doch global, wo liegt dann das problem???

    // obect1.h
    extern CGlobal g_global;
    
    class CObject1 {
    ....
    // obect1.cpp
    CObject1::DoSomewhat()
    {
      g_global.DoSomewhat();
    }
    
    // obect2.h
    extern CGlobal g_global;
    
    class CObject2 {
    ....
    
    // obect2.cpp
    CObject2::DoSomewhat()
    {
      g_global.DoSomewhat();
    }
    
    // Global.h
    class CGlobal {
    ...
    
    // Global.cpp
    CGlobal g_global;
    


  • Ich habe es ja genauso gemacht wie du es beschrieben hast.
    Das Problem ist aber folgendes: Ich kann zwar in irgendeinem anderen Modul, in dem ich die entsprechende header-datei eingebunden habe, auf das objekt zugreifen, aber NUR, wenn ich es nicht compiliert habe, soll heissen: visual c++ bietet beim zugriff über den punktoperator eine liste an variablen, die zum objekt gehören. genau diese liste bekomme ich auch und das muss ja eigentlich heissen, dass der compiler das objekt in dem anderen modul kennt.
    ABER: der compiler meckert beim compilieren, obwohl ich die gleiche variable für das objekt benutze, mit der ich das objekt auch initialisiert habe.
    die fehlermeldung sieht wie folgt aus:
    modell1 = das objekt
    dkg23 = eine variable des objektes

    error C2065: 'modell1' : undeclared identifier
    IVPlotView.cpp(93) : error C2228: left of '.dkg23' must have class/struct/union type
    

    Kann ich es besser machen, wenn ich eine variable vom typ zeiger auf das objekt initialisiere????
    was mache ich falsch????



  • oder soll
    ich die ganze sache mit dem globalen objekt anders gestalten???
    fakt ist: es muss global sein.
    Aber was gibt es sonst noch für möglichkeiten??????



  • Das Problem ist aber folgendes: Ich kann zwar in irgendeinem anderen Modul, in dem ich die entsprechende header-datei eingebunden habe, auf das objekt zugreifen, aber NUR, wenn ich es nicht compiliert habe, soll heissen: visual c++ bietet beim zugriff über den punktoperator eine liste an variablen, die zum objekt gehören. genau diese liste bekomme ich auch und das muss ja eigentlich heissen, dass der compiler das objekt in dem anderen modul kennt.

    cooler satzt 😃
    Die Liste die dir VC++ anzeigt hat nichts zu sagen. Das ist blos ein Assisten... So ziehmlich die einzige möglichkeit welche diesen Fehler produziert, ist das was mit den #include falsch läuft. Also ein #inlcude auf die header welche diese globale Klasse definiert ist überall drinnen wo sie werdendest? Tippfehler ausgeschlossen? Gegenseitige includes ausgeschlossen ?



  • CMatt schrieb:

    cooler satzt 😃

    Ohne Worte 😃 !



  • ja, macht euch nur lustig über die komischen Sätze, die ich schreibe... 😉
    ähm, ich habe mein programm ein wenig umgeräumt:
    es sieht so aus:
    datenobject(hier steht die klasse drin, auf deren objekte zugegriffen werden soll)
    daten(modul für eingabe)
    IVPlotView(mudul für ausgabe)
    ich habe meine objekte in datenobject.h initialisiert (nach dem klassenkörper
    mit:

    extern datenobject object1, object2;
    

    der compiler meckert nicht mehr, wenn ich auf das objekt in einer der beiden
    module(daten oder IVPlotView) zugreifen will, aber beim linken gibt es Probleme und zwar folgende:

    daten.obj : error LNK2001: unresolved external symbol "class Datenobject object2" (?object2@@3VDatenobject@@A)
    daten.obj : error LNK2001: unresolved external symbol "class Datenobject object1" (?object1@@3VDatenobject@@A)
    IVPlotView.obj : error LNK2001: unresolved external symbol "class Datenobject object1" (?object1@@3VDatenobject@@A)
    Debug/IVPlot.exe : fatal error LNK1120: 2 unresolved externals
    Error executing link.exe.
    

    Tja, wäre gut, wenn ihr eine Lösung hättet.
    danke im voraus! und nicht wieder über die sätze lachen....


Anmelden zum Antworten