Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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).

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.

  • 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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.