Veröffentlicht 8. Februar 200619 j 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
8. Februar 200619 j Autor 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
8. Februar 200619 j 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).
8. Februar 200619 j 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.
8. Februar 200619 j 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.
9. Februar 200619 j Autor 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)
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.