ubuntuusers.de

Maps speichern C++

Status: Gelöst | Ubuntu-Version: Ubuntu 11.04 (Natty Narwhal)
Antworten |

Zweistein97

Avatar von Zweistein97

Anmeldungsdatum:
24. April 2011

Beiträge: 161

Hallo Zusammen, ich schreibe gerade ein Programm, dass wie ein Adressbuch funktionieren soll. Jetzt habe ich versucht, eine Map zu Speichern. Der Compiler gibt aber eine Meldung aus, die ich als ziemlicher Anfänger nicht ganz begreife.

1
2

Output.write (&adressen_map, sizeof (adressen_map));

Die Compilermeldung ist folgende:

Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

Kann mir hier jemand weiterhelfen? danke schonmal im Vorraus!

Yoschi

Anmeldungsdatum:
11. April 2009

Beiträge: 454

Hallo !

Leider kann man mit der Meldung relativ wenig anfangen, solange man die verwendeten Typen nicht kennt. Ich gehe jetzt einfach mal von std::ostream (Output) und std::map<> aus.

Die ostream::write Methode verlangt einen char Zeiger und keinen auf eine map. Deshalb müsstest du den Kompiler mit

1
reinterpret_cast<char*>(&adressen_map)

dazu zwingen, die map wie eine Zeichenkette zu behandeln. Als Ergebnis würdest du jede Menge Müll und vieleicht auch ein bisschen was von dem was du willst bekommen, weil einfach alle Bytes der Map (bis zur ersten 0) ausgegeben werden. Du willst die Ausgabe aber vermutlich lesen können, und da du ein Mensch bist, wird das dann schwieriger (eher unmöglich)

Du kannst also maps nicht "einfach so" ausgeben, sondern musst über die Elemente iterieren und jedes einzeln ausgeben. Wenn dein Outputobjekt wirklich ein ostream ist, kannst du den operator<< statt write verwenden, der "funktioniert" für mehr als Zeichenketten. Damit musst du nicht jedes Schlüssel/Wert - Paar davor nicht auch noch selbst umwandeln.

Und wenn dir auch die Schleife auf Dauer zu viel Arbeit wird: operator<< selbst für maps überladen (je nachdem auch mit Templates, damit es für alle gilt) ☺

Yoschi

Antworten |