globale Varible bzw. eine classe übergreifend nutzen



  • hi,

    ich habe folgendes problem:
    ich soll ein kleines datenbankprg scheiben (nur keine richtige datenbank).
    mein problem ist nun, so wie ich es gerne programmieren möchte benötige ich eine classe die ich in allen .cpp´s brauche.
    zB im mainfrm.cpp setzte ich beim neuanlegen einen counter auf null, diesen benötige ich dann im (zb) umsatzview.cpp.
    habe schon versucht über eine headerdatei ranzukommen, nur sagt der compiler mir dann das diese classe schon initialisiert ist - klar wurde ja auch schon woanders aufgerufen...
    ich weiß nicht mehr weiter.

    danke für eure hilfe!



  • kannst es ja mal mit "extern" versuchen, d.h. die globale variable (in deinem fall die instanz deiner klasse) in den cpp-Files in denen du sie benötigst einbinden. sollte funktionieren.



  • danke für die schnelle antwort.

    der compiler sagt mir "Keine Klasse oder Namespace" - obwohl ich eine class verwende.
    nun weiß ich nicht ob ich das richtig gemacht habe.
    kannst du mir vielleich ein kleines beispiel posten?

    thx!



  • also Dein Vorhaben eine Klasse/Variablen global zu nutzen ist nicht ganz
    im Sinne von OOP.

    Weshalb arbeitest Du denn nicht mit einem Doc/View Modell?

    So 'ne globale Klasse gibt's tatsächlich.
    Die Scott Meyer's Singleton Klasse.

    Falls Du Interesse am Code hast, schick mir eine Mail. 😉

    epidemic



  • tja, epidemic hat eigentlich recht, aber die theoretische vorgehensweise ist folgendermaßen:

    mal angenommen du hast irgendwo ne Klasse definiert die MyClass heißt. Du hast eine global Instanz, gloInst, dieser Klasse mit new erzeugt:
    MyClass *gloInst = new MyClass();

    um diese variable in jedem anderen source file deines projektes zu nutzen musst du in den entsprechenden Files einfach einfügen:

    extern MyClass *gloInst;

    das sollte es tun 🙂



  • Oder du baust einen Zeiger auf eine Instanz deiner Klasse als Member in deine App-Klasse ein. An die kommst du ja von überall mit AfxGetApp dran. Vergiss aber das Casten nicht.


Log in to reply