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.


Log in to reply