Globales Objekt im Header?



  • Hallo,

    ich hab nochmal eine Verständnissfrage.

    ich habe eine Klasse a in datei a.h und a.cpp
    diese benutzt klasse b in b.h und b.cpp

    ich möchte nun in a.h eine instanz der klasse b als bObj "veröffentlichen", so
    dass alle units die a.h benutzten auf bObj zugreifen können.

    Hoffe das ist soweit verständlich?

    ich habe im Header einfach b bObj eingetragen,
    allerdings sagt der Compiler "multiple definition of bObj".
    Und zwar für jede Klasse die ich von a ableite.(anscheinden)
    Der Header hat allerdings eine #ifndef #define Konstruktion.

    Kann mir jemand auf die Sprünge helfen?

    Ach noch eine Frage...
    Gibt es unter C++ vordefinierte Klassen für Listen,etc???
    Ich finde sowas nur für mfc oder VC++....

    Gruß
    FXMaveric



  • FXMaveric schrieb:

    ich möchte nun in a.h eine instanz der klasse b als bObj "veröffentlichen", so
    dass alle units die a.h benutzten auf bObj zugreifen können.

    Hoffe das ist soweit verständlich?

    Aus Lesersicht: ja
    Aus Programmierersicht: nein (Globale Variablen sollte man meiden)

    FXMaveric schrieb:

    ich habe im Header einfach b bObj eingetragen,

    Ich nehme anhand deiner weiteren Beschreibung an das du Includeguards kennst ("hat allerdings eine #ifndef #define Konstruktion").

    Such mal nach dem Schlüsselwort extern ("extern b bObj;" im Header, "b bObj;" im Source).

    FXMaveric schrieb:

    Ach noch eine Frage...
    Gibt es unter C++ vordefinierte Klassen für Listen,etc???
    Ich finde sowas nur für mfc oder VC++....

    Die C++ Standardbibliothek liefert noch weit mehr als das.
    std::vector, std::list, std::map...

    Ich persönlich verwende die Referenz von der Dinkumware-Umsetzung, aber es gibt noch Einsteigerfreundlichere, habe nur grad keinen anderen Link zur Hand.

    cu André



  • Referenzen zur Standardbibliothek gibts beispielsweise noch:
    http://www.cplusplus.com/
    http://www.cppreference.com/wiki/

    Erstere verwende ich selber sehr häufig.



  • Hallo

    und Danke erst mal für die Antworten!

    Bezüglich:

    Such mal nach dem Schlüsselwort extern ("extern b bObj;" im Header, "b bObj;" im Source).

    Ich hab den Source selbst geschrieben und das nicht verwendet. Auch nicht beim suchen gefunden. Soll das dort stehen und darf nicht?

    Gruß
    FXMaveric



  • FXMaveric schrieb:

    Such mal nach dem Schlüsselwort extern ("extern b bObj;" im Header, "b bObj;" im Source).

    Ich hab den Source selbst geschrieben und das nicht verwendet. Auch nicht beim suchen gefunden. Soll das dort stehen und darf nicht?

    Ich nehme mal an das du www.google.de kennst?

    Gekürzter Auszug aus der MSDN

    C/C++ Keywords
    extern

    extern declarator      // used when variable or function has external linkage
    

    The extern keyword declares a variable or function and specifies that it has external linkage (its name is visible from files other than the one in which it's defined). When modifying a variable, extern specifies that the variable has static duration (it is allocated when the program begins and deallocated when the program ends). The variable or function may be defined in another source file, or later in the same file. In C++, when used with a string, extern specifies that the linkage conventions of another language are being used for the declarator(s).

    Declarations of variables and functions at file scope are external by default.

    // Header (.h)
    extern b bObj;
    // Source (.cpp)
    b bObj;
    

    Mit ersteren legst du keinen Speicher an, sondern gibst nur bekannt das es ein b mit dem Namen bObj gibt. In der cpp definierst du es dann (hier wird der Speicher reserviert...).

    Ich selbst brauche extern eigentlich so gut wie nie (globale Variablen: pfui).

    cu André


Anmelden zum Antworten