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 Zitieren
Guybrush Threepwood Geschrieben 8. Februar 2006 Geschrieben 8. Februar 2006 Machs mal so: CPerson::s_nCount++; [/PHP] Zitieren
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 Zitieren
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). Zitieren
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. Zitieren
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. Zitieren
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) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.