Zum Inhalt springen

statische Struktur als Member einer Klasse


TDM

Empfohlene Beiträge

Hallo,

ich wollte mir heute eine Klasse zusammenstellen, die ihre Objekte in einer ini-Datei speichert.

Problem an der Sache ist, dass die Schlüssel (unter den Selections der Ini) erst zur Laufzeit festlegen möchte.

dazu hab ich mir für die spätere Speicherung folgende Struktur definiert:


typedef struct{

	LPTSTR p_lpKeySName;

	LPTSTR p_lpKeyFName;

	LPTSTR p_lpKeyTel;

	LPTSTR p_lpKeySG;

} SFileProperties_t;

Diese ist statisch (für alle Instanzen) als Member der Klasse definiert:

class CUser  

{

public:

	CUser();

	~CUser();

	static void s_p_setFileProperties(const SFileProperties_t &p_sNewFileProperties);


private:

	static SFileProperties_t s_m_seFileProperties;

};

Soweit geht die Deklaration (d.h. sie bringt keinen Fehler) wenn ich jetzt die statische Funktion zum Setzen der (Struktur-) Werte wie folgt definier:

void CUser::s_p_setFileProperties(const SFileProperties_t &p_sNewFileProperties)

{

	strcpy(CUser::s_m_seFileProperties.p_lpKeyFName, p_sNewFileProperties.p_lpKeyFName);

	strcpy(CUser::s_m_seFileProperties.p_lpKeySName, p_sNewFileProperties.p_lpKeySName);

	CUser::s_m_seFileProperties.p_lpKeyTel = p_sNewFileProperties.p_lpKeyTel;

	strcpy(CUser::s_m_seFileProperties.p_lpKeyTel, p_sNewFileProperties.p_lpKeyTel);

}

erhalte ich folgende Fehler:

User.obj : error LNK2001: Nichtaufgeloestes externes Symbol "private: static struct SFileProperties_t CUser::s_m_seFileProperties" (?s_m_seFileProperties@CUser@@0USFileProperties_t@@A)

Debug/CUser.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise

Kann mir wer sagen woran das liegt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja es reicht nicht den static eintrag in der Klassendefinition anzugeben, dort ist er dann nur deklariert.

Du musst dann noch zusätzlich implementieren:

CUser::SFileProperties_t s_m_seFileProperties;

Ob die Begründung nun so ganz astrein ist bin ich nicht sicher, auf alle fälle mach das in die .cpp rein und gut.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Konnte gestern nicht mehr on :rolleyes:

Ja, das ging, zumindest kommt kein Fehler mehr...

Ich dachte eigentlich, dass ab der Variablendeklaration diese Verfügbar ist. Aber ich hab vergessen das static ja eine Speicherklasse ist, die auch initialisiert werden muss...

Hätte nicht gedacht, dass das so einfach bei privaten Membern geht :uli

Link zu diesem Kommentar
Auf anderen Seiten teilen

Damit du dir dieses ganze Speichermanagement schenken kannst, empfehle ich, die Zeiger durch Stringobjekte zu ersetzen.

String oder CString ?

Ich hatte CString probiert und da kam ein Fehler von wegen Konstrukor in Strukturen (hab den Code leider nicht da, sonst würd ich den kompletten Wortlaut zitieren)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Abgesehen von deinem Problem, was macht das für einen sinn ??????

Ich will den Anwendern, die das Programm später einsetzen nicht zumuten personenbezogene Daten immer neu eingeben zu müssen. Ini-Dateien schienen mir am besten für das Auslesen und Eintragen der Werte.

Und die Struktur halt, damit man später mehrere Dateien verwalten kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

eine ganz normale Text-Datei wurde ausreichen

Mir doch egal... ini-Dateien sind im Endeffekt auch nur Textdateien (nur halt mit der Endung .ini)

Es ging mir mehr um den Aufbau der Datei und das ist nunmal unter Windows ini-ähnlich:


[Selection]

Key1=Value1

Key2=Value2

Key3=Value3

...

Dateitypen interessieren mich herzlich wenig :P

Wichtig ist nur, dass ich die mit meinem Programm lesen kann. :marine

Link zu diesem Kommentar
Auf anderen Seiten teilen

static bedeutet, dass du auf die Variable ohne Instanziierung zugreifen kannst.

Eine statische Variable gilt für alle Instanzen dieser Klasse.

:P

Eine Klassenvariable wird nicht für jedes Objekt neu angelegt - spart also Speicher. Außerdem können die Objekte selber diese verändern. Meinetwegen um einen Counter hochzuzählen

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...