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 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?

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.

  • Autor

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

  • Autor
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)

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

Ich will den Anwendern, die das Programm später einsetzen nicht zumuten personenbezogene Daten immer neu eingeben zu müssen.

ach so

Ini-Dateien schienen mir am besten für das Auslesen und Eintragen der Werte.

eine ganz normale Text-Datei wurde ausreichen

  • Autor

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

  • Autor

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

Normal wird ja über Objekt.Attribut eine Variable (oder Methode) angesprochen

Bei static wär das Class::Variable (/Methode)

Edit:

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

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

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.