TDM Geschrieben 8. Februar 2006 Geschrieben 8. Februar 2006 Hallo, ich habe das Problem, dass ich eine Klasse Person habe und diese einen Zähler. Wenn ich diesen aber initialisieren möchte kommt bei mir der Fehler: "CPerson::s_nCount" Fehlende Speicherklasse oder Typspezifizierer hier noch der Code der Header: class CPerson { public: CPerson(Name, Vorname); static int s_nCount; private: CString m_Name; CString m_Vorname } und die cpp: CPerson::s_nCount = 0; // <-- das geht nicht CPerson::CPerson(CString Name, CString Vorname):m_Name(Name), m_Vorname(Vorname) { s_nCount++; //<--- Nicht aufgelöstes externes Symbol } Danke im Vorraus mfg TDM
Guybrush Threepwood Geschrieben 8. Februar 2006 Geschrieben 8. Februar 2006 Machs mal so: CPerson::s_nCount++; [/PHP]
TDM Geschrieben 8. Februar 2006 Autor Geschrieben 8. Februar 2006 Hatte ich auch probiert - ging ne... das aber: [B]int[/B] CPerson::s_nCount = 0; mir gings ja nicht ums erhöhen sondern nur ums initiallisieren
Bubble Geschrieben 8. Februar 2006 Geschrieben 8. Februar 2006 Zum Initialisieren ist der Konstruktor da. Einzige Ausnahme: Einige const members können direkt Werte zugewiesen bekommen (es handelt sich dann ja ohnehin um Konstanten).
Klotzkopp Geschrieben 8. Februar 2006 Geschrieben 8. Februar 2006 Zum Initialisieren ist der Konstruktor da.Es handelt sich um eine statische Membervariable. Die kann man gar nicht im Konstruktor initialisieren, sondern nur dort, wo sie definiert wird.
Bubble Geschrieben 8. Februar 2006 Geschrieben 8. Februar 2006 Es handelt sich um eine statische Membervariable. Die kann man gar nicht im Konstruktor initialisieren, sondern nur dort, wo sie definiert wird. Man kann ihr im Konstruktor durchaus einen neuen Wert zuweisen (wie natürlich an jeder anderen Stelle des Programms auch), der bei der Definition angegebene Wert wird halt einfach überschrieben. (Nicht mit const verwechseln.) Beispiel: #include <iostream> class Sample { public: static int value; Sample() { value = 2; }; }; int Sample::value = 1; int main() { std::cout << Sample::value << std::endl; Sample s1; std::cout << s1.value << std::endl; std::cout << Sample::value << std::endl; return 0; } Liefert die Ausgabe: 1 2 2 Vielleicht hilft dem Fragesteller ja mein Beispiel.
TDM Geschrieben 9. Februar 2006 Autor Geschrieben 9. Februar 2006 Man kann ihr im Konstruktor durchaus einen neuen Wert zuweisen (wie natürlich an jeder anderen Stelle des Programms auch), der bei der Definition angegebene Wert wird halt einfach überschrieben. (Nicht mit const verwechseln.) Beispiel: class Sample { public: static int value; Sample() { value = 2; }; }; [b]int Sample::value = 1;[/b] Vielleicht hilft dem Fragesteller ja mein Beispiel. Das war ja meine Frage... ich hatte nur das int vergessen (das man sie im Konstruktor setzen kann weis ich)
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden