TDM Geschrieben 20. September 2006 Geschrieben 20. September 2006 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? Zitieren
setiII Geschrieben 20. September 2006 Geschrieben 20. September 2006 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. Zitieren
TDM Geschrieben 22. September 2006 Autor Geschrieben 22. September 2006 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 Zitieren
Klotzkopp Geschrieben 22. September 2006 Geschrieben 22. September 2006 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. Zitieren
TDM Geschrieben 22. September 2006 Autor Geschrieben 22. September 2006 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) Zitieren
bigpoint Geschrieben 22. September 2006 Geschrieben 22. September 2006 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 Zitieren
TDM Geschrieben 22. September 2006 Autor Geschrieben 22. September 2006 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. Zitieren
bigpoint Geschrieben 22. September 2006 Geschrieben 22. September 2006 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 Zitieren
TDM Geschrieben 22. September 2006 Autor Geschrieben 22. September 2006 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 Zitieren
pit030771 Geschrieben 24. September 2006 Geschrieben 24. September 2006 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: Zitieren
TDM Geschrieben 25. September 2006 Autor Geschrieben 25. September 2006 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. Zitieren
pit030771 Geschrieben 25. September 2006 Geschrieben 25. September 2006 ok danke, das hab ich verstanden. aber wofür macht das sinn? Zitieren
TDM Geschrieben 26. September 2006 Autor Geschrieben 26. September 2006 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 Zitieren
pit030771 Geschrieben 26. September 2006 Geschrieben 26. September 2006 ok, danke dir!:marine Zitieren
Empfohlene Beiträge
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.