C++ Statische Elemente eines Klassentyps initialisieren

badday

Commander
Registriert
Sep. 2007
Beiträge
3.023
Moin zusammen,

ich vertiefe gerade meine Kenntnisse in C++ und bin nun auf ein Problem gestoßen.
Folgendes Szenario:

Ich habe zwei Klassen:

Code:
class fist_class
{

    public:
    first_class(int a): val(a) {}; //Konstruktor, übernimmt int
    int get() {return val;} //gibt val zurück



    private:
    int val;
};

und

Code:
class second_class
{

    public:
    
    static first_class their;
    static int FirstVal(){return  their.get();}
   
};

their (Name hat keine Bedeutung) ist also vom Klassentyp first_class und static.

Nun will ich die beiden Klassen verwenden:

Code:
int main()
{
    first_class one(16); //ok

    cout<<one.get()<<endl; //ok
    //!!!
    second_class::their(34); //nicht ok
    //geht auch nicht:
    first_class second_class::their(32);
    
    second_class two; //geht

    //geht natürlich nicht, da FooVal() auf their zugreifen müsste und dies ja "keinen" Wert hat
    cout<<second_class::FooVal()<<endl;

    return 0;
}

Meine Frage also: Wie kann ich "their" initialisieren?
Ich bringe mir das selber bei, habe daher keine Möglichkeit jemanden zu fragen, ich bitte daher auch um Nachsicht. Ich habe natürlich im Internet gesucht und auch versucht, es mit Büchern herauszufinden, ist mir aber nicht geglückt.

Vielen Dank!

Gruß,

badday

EDIT: Es kann auch eine völlig falsche Annahme enthalten sein (was vielleicht der Grund ist, dass bisher keiner geantwortet hat). Es nur ein triviales Beispiel und sollte daher relativ simpel zu lösen sein.
 
Zuletzt bearbeitet:
Mit

PHP:
class second_class
{

    public:
    
    static first_class their;
    static int FirstVal(){return  their.get();}
   
};

deklarierst du their nur, was dir noch fehlt ist die Definition (und die findet außerhalb der Klasse statt). Das könnte also dann z.B. so aussehen:

PHP:
class second_class
{

    public:
    
    static first_class their;
    static int FirstVal(){return  their.get();}
   
};

first_class second_class::their = first_class(17);
 
Ein großes Dankeschön!

Ich hatte es fälschlicherweise innerhalb von main definieren wollen.

Gruß,

badday
 
Zuletzt bearbeitet:
Zurück
Oben