Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

1

09.03.2009, 17:12

Vektoren Speichern.

Hallo,

ich hab mein Projekt mit dem Verwaltungsystem mal über dden Haufen geworfen und neu angefangen.

Ich benutze jetzt vektoren anstatt listen.

Das Speichern sich funktioniert super. Er läd auch alles wieder so wie es sein soll.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void CKundenVerwaltung::m_Speichern()
{

    ofstream Output ("Kunden.ea",ios::binary);
    Output.write ((char*) &m_vNormaleKunden,sizeof (m_vNormaleKunden));
    Output.close ();

    

}

void CKundenVerwaltung::m_Laden()
{
 
  


    ifstream Input ("Kunden.ea",ios::binary);
    Input.read ((char*) &m_vNormaleKunden,sizeof (m_vNormaleKunden));
    Input.close ();

    
   


}



Nur wenn ich geladen habe und jetzt einen neuen Eintrag erstelle bekomme ich an der Stelle eine Fehlermeldung an der ,der Eintrag in den Vektor geschoben wird.


C-/C++-Quelltext

1
2
3
4
5
6
7
void CKunde::m_EintragNormal (CKunde_Normal Kunde_Normal)
{
  

    m_vNormaleKunden.push_back (Kunde_Normal);

}



Debugger sagt nur was von wegen Speicherverletzung und Zugrissverletzung. Würde mir jetzt nur in den Sinn kommen das ich über die größe des Vektors hinausschreibe aber das geht doch nicht , weil sich Vektoren wie Strings immer "selber vergrößern".

Kann mir da einer Helfen?

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

2

09.03.2009, 17:26

Das kann nicht funktionieren, da die einzeilnen Elemente der Liste im Speicher nicht
hintereinander liegen, sondern mit Pointern verbunden sind...
Du musst also jedes einzelne Element abfragen und in eine Textdatei schreiben...
Und lesen anderesherum :)

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

3

09.03.2009, 17:32

Anders rum ich benutze vektoren anstatt listen. Hatte da nen dreher drinne. Sry

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

4

09.03.2009, 18:06

Ich denke, dass du beim vector keinen direkten Zugriff auf den eigentlichen Buffer bekommst...

Würde also vorschlagen, dass du alle kunden nacheinander speicherst...
irgendwie in ner xml oder so...

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

09.03.2009, 19:00

Was du da machst ist einfach dein rohes Objekt in die Datei zu schreiben, aber nicht den Inhalt des Kontainers. Du musst durch die Einträge iterieren und jeden Eintrag in dein File schreiben. Beim Einlesen der umgekehrte Weg.

6

09.03.2009, 19:02

Zitat von »"David_pb"«

Was du da machst ist einfach dein rohes Objekt in die Datei zu schreiben, aber nicht den Inhalt des Kontainers. Du musst durch die Einträge iterieren und jeden Eintrag in dein File schreiben. Beim Einlesen der umgekehrte Weg.

ein tipp: guck dir mal copy() aus <algorithm> und stream_iterators an. Die erleichtern einem sowas erheblich.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

09.03.2009, 19:03

Zitat von »"PCShadow"«

Zitat von »"David_pb"«

Was du da machst ist einfach dein rohes Objekt in die Datei zu schreiben, aber nicht den Inhalt des Kontainers. Du musst durch die Einträge iterieren und jeden Eintrag in dein File schreiben. Beim Einlesen der umgekehrte Weg.

ein tipp: guck dir mal copy() aus <algorithm> und stream_iterators an. Die erleichtern einem sowas erheblich.


Wieso soll ich mir das anschauen?

8

09.03.2009, 19:12

nicht du, er; das zitat war wegen dem "iterieren", weil genau das macht copy() ja für dich (bzw. ihn :roll: ).

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

09.03.2009, 19:29

Zitat von »"PCShadow"«

nicht du, er; das zitat war wegen dem "iterieren", weil genau das macht copy() ja für dich (bzw. ihn :roll: ).


Achso. :) Aber wenn ich mir so den ersten Post anschau sind die Algos der Stdlib evtl noch etwas zu hoch angesetzt! :)

10

09.03.2009, 20:13

Zitat von »"David_pb"«

Aber wenn ich mir so den ersten Post anschau sind die Algos der Stdlib evtl noch etwas zu hoch angesetzt! :)

hab ich mir auch gedacht, aber dann hab ich mir gedacht, posten kannste trotzdem mal, schaden kanns nicht ;)

Werbeanzeige