CList<CString,CString> list; einer Funktion übergeben ?

Vielen dank für die ausführliche Erklärung. Ich habe es genauso gemacht wie du es hier geschildert hast.

Bis hier her wird der wert richtig übergeben. Jedoch kann ich beim Debuggen nicht feststellen ob der mit SetAt auch richtig abgespeichert wird. Wenn ich Index im Debug überwache steht unter Objekt - __vfptr CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden *


Code:
OnIndexChanged(const CString &str)
{
         Index.SetAt(str, NULL); // Duplikate werden ersetzt, Ptr Anteil nicht genutzt
}

Beim Aufruf bekomme ich die Werte auch nicht zurück.
Mein Aufruf
Code:
                  CStringList EditedRows;
		m_IDCList.GetEditedRowIndexList(EditedRows);
		for(POSITION pos = EditedRows.GetHeadPosition(); pos != NULL; )
			CString articelNr = EditedRows.GetNext(pos); //get index of edited row
 
Zuletzt bearbeitet:
CMapStringToPtr hat ein Member m_pHashTable, das deine Objekte verwaltet und ein m_nCount anhand dessen du siehst wieviele Objekte eingetragen sind.
Wenn du das nicht siehst, ist die Map dort, wo du sie im Debugger betrachtest, nicht mehr gültig.
Ich nehm mal an, dass du in der m_IDCList die geänderten Strings in einer Map speicherst.
Wenn du diese Liste mit GetEditedRowIndexList(EditedRows) holst, musst du sie dort in die Stringliste kopieren.
...::GetEditedRowIndexList(CStringList &EditedRows)
{
CString str;
void *ptr = NULL;
for(pos = Index.GetStartPosition(); pos != NULL; )
{
Index.GetNextAssoc(pos, str, ptr);
EditedRows.AddTail(str);
}
}
 
also ich habs sie so kopiert

Code:
void CSortListCtrl::GetEditedRowIndexList(CStringList &strList)
{
	CString str; // index string
	void *ptr = NULL; // dummy

	// hole alle eingetragenen Strings und kopiere sie in die Stringliste
	for(POSITION pos = Index.GetStartPosition(); pos != NULL; Index.GetNextAssoc(pos, str, ptr))
	{
		strList.AddTail(str); 
	}
}//end GetEditedRowIndexList

irgendwas läuft schief und beim Debuggen bekomme ich auch keine Werte angezeigt. Auch in der Hash Tabelle nicht.

Code:
void CSortListCtrl::SetEditedRowIndex(const CString &str)
{
	Index.SetAt(str, NULL);


// eingebaut wegen debug
String test;
test = "Hallo";
test = test + "du";

}//end SetEditedRowIndex

leider bekam ich hier unter debug auch keine werte angezeigt
 
Zuletzt bearbeitet:
ich denk das die geänderten Strings nicht abgespeichert werden.

Ich denke das hier evtl etwas falsch läuft.

void CSortListCtrl::SetEditedRowIndex(const CString &str)
{
Index.SetAt(str, NULL);
}//end SetEditedRowIndex
 
weist du was. Ich denke das ich hier etwas falsch machen wenn ich versuche die Werte von dem Objekt, des Typs CStringList, abzufragen.

CStringList EditedRows;
m_IDCList.GetEditedRowIndexList(EditedRows);
for(POSITION pos = EditedRows.GetHeadPosition(); pos != NULL; )
CString articelNr = EditedRows.GetNext(pos); //
 
Ist im Prinzip schon OK. Nur beim Holen der Liste aus CSortListCtrl darfst du das GetNextAssoc nicht am Ende der for Anweisung schreiben, da dies ja erst nach dem ersten Schleifendurchlauf ausgeführt wird.

void CSortListCtrl::GetEditedRowIndexList(CStringList &strList)
{
CString str; // index string
void *ptr = NULL; // dummy

// hole alle eingetragenen Strings und kopiere sie in die Stringliste
for(POSITION pos = Index.GetStartPosition(); pos != NULL; )
{
Index.GetNextAssoc(pos, str, ptr)
strList.AddTail(str);
}
}//end GetEditedRowIndexList

Was mich nur etwas wundert, dass du im Debugger die Objekte nicht ordentlich siehst.
An der Stelle mt dem SetAt solltest du eigentlich das Index Objekt ansehen können.

Wenn die Speicherung funktioniert (was ich mal schwer annehme), erhöht sich nach dem Index.SetAt() der Zähler Index.m_nCount um 1.
 
Zurück