static Problem
-
Habe eine Abstrakte Klasse und wollte eine Member Variable int auf static int ändern, dann kam der Fehler Nichtaufgelöstes Externes Symbol.
Was mache ich falsch
-
Du definierst die Variable nirgends.
-
Eine statische Membervariable muß noch irgendwo definiert werden, damit du sie verwenden kannst:
class test { static int s_val;//das ist eine reine Deklaration ... }; int test::s_val=0;//hier die dazugehörige Definition - sollte in genau einer .CPP vorkommen
-
Vielen Dank Funktioniert.
Noch eine kleine Frage.
Ich möchte die Instanzen damit zählen.
Habe mehrere überladene Konstruktoren, muss ich jetzt in jedem s_val++ machen oder kann ich einen allgemeinen Konstruktor machen der mir das erledigt.
Hab das Problem öfters mit den Redundanzen in den Konstruktoren.
-
Hi,
da der base class constructor ja jedesmal aufgerufen wird, kannst Du das Inkrementieren dort erledigen:
class Base { static size_t count; // private, damit da Derived classes keinen Schmuh mit betreiben können public: Base() {++count;} ~Base() {--count;} size_t getCount() { return count; } }; // mal zur Anwendung: struct Derived : Base { int ID; Derived(int i) : ID(i) {cout << "Derived::Derived(" << ID << "): " << getCount() << "\n";} ~Derived() {cout << "Derived::~Derived(" << ID << "): " << getCount() << "\n";} }; size_t Base::count = 0;
Threadsafe ist das Ganze natürlich nicht...
Gruß,
Simon2.