Zugriff auf CString* schlägt fehl
-
Hi,
kann mir einer sagen warum ich bei dem unteren Quelltext diese Fehlermeldug bekomme ? Die m_strLogFile Membervariable habe ich in der Klasse als CString deklariert.
error C2039: 'm_strLogFile' : Ist kein Element von 'CString'
... // Überprüfen ob das aktuelle Logfile existiert CString *file = NULL; CFileFind find; find.FindFile(file->m_strLogFile); ...vielen Dank
-
wo ist der aufruf von new für den CString? und warum erstellst du den String nicht ganz normal auf dem Stack?
-
m_strLogFile ist kein Element von CString!
CFileFind find; find.FindFile(m_strLogFile);
-
ich möchte das über einen Zeiger machen weil ich keine Kopie erstellen will wenn ich diesen String gbenutze sondern nur einen Verweis erzeuge der auch perfomanter ist.
erledigt denn nicht der Konstruktor von CString die Stringzuweisung muss ich das wirklich mit new machen ?
Wär trotzdem nett von Euch wenn ihr mir schreiben könntet wie ich das über einen Zeiger mache ?
MfG
-
schon mal mit ner referenz versucht ?
Devil
-
nein noch nicht
aber ich würds trotzdem gerne über Zeiger machen denn Referenzen sind ja nur ein ersatz bzw. alias name für die Variable ich will aber nur auf den Speicherbereich der Variablen verweisen um so eine erhöhte Perfomance zu erreichen. Mag sein das es mit Referenzen auch gut geht aber würd trotzdem gerne mit Zeigern das ganze machen. Aussserdem würd ich generell wissen wie das mit Zeigern geht da sie sehr nützlich sind. Also wenn da jemand bescheid weis wie das mit Zeigern geht, dem wär ich sehr dankbar.
MfG
-
übe zeiger irgendwie anders...es ist SEHR unüblich ein String Objekt auf dem Heap anzulegen.
-
@Jarin:
CString paßt selbst auf, das keine Kopie angelegt wird.
CString a, b; a = _T("Hallo"); // kopie von "Hallo" auf den heap b = a; // b referenziert das gleiche heap-Objekt wie a, keine String-Kopie b += _T(" World"); // b wird verändert, erst jetzt wird von b eine Kopie erzeugt
-
CString ist ein Objekt und das muss angelegt werden um es benutzen zu können! Der Inhalt (die Zeichenkette) is da primär erstmal egal, denn die kommt später erst... Wenn du das als Zeiger benutzen willst solltest du ein CString Objekt erstmal irgendwo angelegt und gefüllt parat haben sonst ergibt das ganze ünerhaupt keinen Sinn. Dein Zeiger ist schliesslich nur ein 32Bit integer im Speicher der eine Adresse aufnimmt.
m_strLogFile ist keine Membervariable von CString, weshalb der die da auch nicht findet - logisch. Heisst so viel wie du willst eine Information von CString abrufen die es nicht hat und kennt.
Faszit: Erst CString-Objekt anlegen und füllen, dann Referenz auf den Zeiger übergeben, dann den String zum Suchen verwenden. Wenn es einen Fehler gibt musst du die CString-Variable vielleicht vorher noch auf LPCTSTR casten...
gruß