Hallo,
folgendes… ich habe eine Klasse geschrieben, von der mehrere
weitere Klassen abgeleitet werden. Diese Klasse hat eine
Membervariable vom Typ „static map“. Bei
einem Zugriff auf diese Variable erhalte ich aber beim Linken die Fehlermeldung: „undefined reference…“.
Hallo Hendrik,
ich denke nicht, dass dein Problem daher rührt, dass du eine Klassenhierarchie bildest. Ich glaube, du hast versäumt die Variable zu initialisieren.
Auf die Gefahr hin, dass ich Dir vielleicht nichts Neues erzähle:
Eine statische Elementvariable einer Klasse gehört nicht zu der Instanz, die du von der Klasse bildest, sondern zur Klasse selbst. Sie wird deshalb nicht automatisch mit der Instanz der Klasse initialisiert. Das würde dem ganzen Sinn einer statischen Elementvariable zuwiderlaufen. Denn dann hätte ja jede Instanz der Klasse eine eigene Instanz dieser Variable. Sie würde nicht mehr von allen Instanzen der Klasse geteilt werden. Deshalb muss eine statische Elementvariable außerhalb der Klassendefinition initialisiert werden.
Deine Klasse könnte so aussehen:
class DeineKlasse
{
public:
DeineKlasse();
private:
static map statVar;
};
Die statische Elementvariable wird so initialisiert, dass erst der Datentyp [map] angegeben werden muss, danach der genaue Bezeichner der Elementvariablen [deineKlasse::statVar]:
map deineKlasse::statVar = map();
Da der Speicher für eine statische Elementvariable nicht bei der Instanzbildung reserviert wird, sondern bei der Definition außerhalb der Klasse, hat eine statische Elementvariable auch nichts im Konstruktor der Klasse verloren:
deineKlasse::deineKlasse()
{
return;
}
Gruß,
Bernhard.