2016-07-12 8 views
0

Was ich tun möchte ist; Speichern Sie einige Zeichenfolgenwerte in einer Textdatei in einer Umgebung mit mehreren Threads. Dann ich jede Zeichenfolge Werte in einer Warteschlange speichern und dann diese Warteschlange Schritt für Schritt lesen und diese Werte in eine Textdatei schreiben.Richtige Methode zum Implementieren der Warteschlange mit MFC?

Ich sah ein Beispiel in MSDN über Warteschlangen. Von diesem Beispiel habe ich einige Änderungen vorgenommen und dieses Codesegment erstellt, um CString Werte zu speichern. Aber ich kann es von diesem Code nicht erreichen.

class CQueue :public CTypedPtrList < CObList, CString* > 
{ 
public: 
    void AddToEnd(CString* newLog) { 
     AddTail(newLog); 
    } 
    CString* GetFromFront() { 
     return IsEmpty() ? NULL : RemoveHead(); 
    } 
}; 

Dann versuche ich so zu nennen:

CQueue q; 
CString str("data1"); 
q.AddToEnd(&str); 

Es ist diesen Fehler geben:

'void CObList::AddTail(CObList *)' : cannot convert argument 1 from 'ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>> ' to 'CObject *' 

Was ist der beste Weg Queue in MFC zu implementieren?

Antwort

1

CString ist kein Objekt oder besser: es ist nicht von CObject abgeleitet. Aber du hast gesagt, die Liste sollte von CObList abgeleitet sein. Sie müssen stattdessen CPtrList verwenden.

class CQueue :public CTypedPtrList < CPtrList, CString* > 

Bitte beachten Sie: Aber sogar als Sie Code ist sehr gefährlich. In Ihrem Beispiel erstellen Sie einen Zeiger auf eine Variable, die auf dem Stapel vorhanden ist. Wenn die Funktion existiert, wird der Zeiger ungültig ...

+0

Jetzt habe ich ein anderes Problem beim Erhalten CString * Typ Integer. Als Beispiel, wenn wir 124 speichern; Es wird nur 1 weitere 2, 4 Nummern fehlen gedruckt. ? – Elshan

+0

Dies ist eine neue Frage ... vielleicht geben Sie nur ein Zeichen aus, – xMRi

+0

Ja, das ist eine neue Frage .. Ich habe ** (Zeiger des Zeigers) verwendet, um den Wert – Elshan