Veröffentlicht 20. September 200618 j 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?
20. September 200618 j 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.
22. September 200618 j Autor Konnte gestern nicht mehr on 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
22. September 200618 j Ich hoffe, dass du auch irgendwo Speicher holst, auf den diese Zeiger weisen können. Sonst geht das erst strcpy in die Hose. Damit du dir dieses ganze Speichermanagement schenken kannst, empfehle ich, die Zeiger durch Stringobjekte zu ersetzen.
22. September 200618 j 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)
22. September 200618 j Hallo, Abgesehen von deinem Problem, was macht das für einen sinn ?????? ich wollte mir heute eine Klasse zusammenstellen, die ihre Objekte in einer ini-Datei speichert. Gruß bigpoint
22. September 200618 j 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.
22. September 200618 j 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
22. September 200618 j 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 Wichtig ist nur, dass ich die mit meinem Programm lesen kann. :marine
24. September 200618 j ich habe in einem progemm von mir auch etwas ähnliches implementiert nur ohne static. könnte mir jemand vieleicht das mit dem static mal erklären wofür das ist? :confused:
25. September 200618 j 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.
26. September 200618 j Autor static bedeutet, dass du auf die Variable ohne Instanziierung zugreifen kannst. Eine statische Variable gilt für alle Instanzen dieser Klasse. 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.