Technician Geschrieben 16. Oktober 2002 Teilen Geschrieben 16. Oktober 2002 Hallo, ich habe eine Klasse Document, die einen Vektor namens theDatVector und des Typs vector<CString> DATVECTOR enthält. Außerdem den zugehörigen Iterator. In einer anderen Klasse, View, soll nun auf den Vektor zugegriffen werden. Dazu enthält die Klasse Document folgende Methoden: DATVECTOR::iterator GetIterator(){return theDatIterator;}; DATVECTOR GetDatVector(){return theDatVector;}; Wie kann ich jetzt von der Klasse View aus (die auf Methoden von Document zugreifen kann) den Vector bearbeiten?! Mit Vector und Iterator zurückgeben hab ich noch nie was gemacht und ich verzettel mich da ziemlich... Technician Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
HELLmut Geschrieben 16. Oktober 2002 Teilen Geschrieben 16. Oktober 2002 EDIT: Wenn man lesen könnte.... Sorry Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 16. Oktober 2002 Teilen Geschrieben 16. Oktober 2002 Original geschrieben von Technician Wie kann ich jetzt von der Klasse View aus (die auf Methoden von Document zugreifen kann) den Vector bearbeiten?!Vom Rückgabewert einer Funktion wird eine Kopie angelegt, d.h. Änderungen am Rückgabewert von GetIterator wirken sich nicht auf theDatIterator aus, weil das Original unverändert bleibt. Dieses Kopieren kannst Du unterbinden, wenn Du Referenzen oder Zeiger zurückgibst, z.B.: DATVECTOR::iterator& GetIterator(){return theDatIterator;}; DATVECTOR& GetDatVector(){return theDatVector;}; Für den Aufruf musst Du dann auch eine Referenz verwenden: DATVECTOR::iterator& itref = pDoc->GetIterator(); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Technician Geschrieben 17. Oktober 2002 Autor Teilen Geschrieben 17. Oktober 2002 Hi! Original geschrieben von Klotzkopp Vom Rückgabewert einer Funktion wird eine Kopie angelegt, d.h. Änderungen am Rückgabewert von GetIterator wirken sich nicht auf theDatIterator aus, weil das Original unverändert bleibt. Dieses Kopieren kannst Du unterbinden, wenn Du Referenzen oder Zeiger zurückgibst, z.B.: klar... *technician-sich-ans-hirn-fass* so geht's natürlich... Hab das ganze jetzt so programmiert: DATVECTOR::iterator& itref = GetDocument()->GetDatIterator(); DATVECTOR vect = GetDocument()->GetDatVector(); Datensatz* pDatensatz; CString daten; for(itref = vect.begin(); itref !=vect.end(); itref++) { pDatensatz = *itref; daten = pDatensatz->GetInhalt(); }; An einer Stelle hapert's aber leider noch ... beim compilieren bleibt er in der Zeile, in der pDatensatz = *itref steht, hängen mit error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class CString' akzeptiert (oder keine geeignete Konvertierung moeglich) Technician Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 17. Oktober 2002 Teilen Geschrieben 17. Oktober 2002 Original geschrieben von Technician error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class CString' akzeptiert (oder keine geeignete Konvertierung moeglich) Naja, wenn Du einen DATVECTOR::iterator dereferenzierst, bekommst Du einen CString (siehe Deine Definition von DATVECTOR). Ich weiß nicht, was Datensatz für ein Typ ist, aber Du kannst offenbar einem Datensatz* keinen CString zuweisen. Das sollte funktionieren:daten = *itref; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 17. Oktober 2002 Teilen Geschrieben 17. Oktober 2002 Noch was: Wenn Du itref sowieso vect.begin() zuweist, gibt es keinen Grund für den Aufruf von GetDatIterator. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Technician Geschrieben 17. Oktober 2002 Autor Teilen Geschrieben 17. Oktober 2002 Original geschrieben von Klotzkopp Naja, wenn Du einen DATVECTOR::iterator dereferenzierst, bekommst Du einen CString (siehe Deine Definition von DATVECTOR). Ich weiß nicht, was Datensatz für ein Typ ist, aber Du kannst offenbar einem Datensatz* keinen CString zuweisen. *tech-sich-nochmal-tüchtig-ans-hirn-fass* ich hab natürlich typedef vector<CString> DATVECTOR; geschrieben und dann kann ich natürlich nicht einfach mit "Datensatz" arbeiten... Die Elemente des Vektors sollen später mal vom Typ Datensatz sein, aber ich hab ja jetzt noch testweise CString drin... ich glaub, ich bin schon ein bisserl durcheinander:rolleyes: Ich glaub, da wär ich allein noch ewig nicht draufgekommen, woran es liegt... Danke! Technician Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.