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

Stupidus

Frischling

  • »Stupidus« ist der Autor dieses Themas

Beiträge: 41

Wohnort: Heilbronn

Beruf: Schöler

  • Private Nachricht senden

1

14.03.2006, 16:16

Klasse in Datei schreiben mit Membervars vom Typ String

Hi Leute,
und noch ein Problem zu meiner Highscoreliste ^^. Ich komm mir langsam zu dumm zum kacken vor!! Also ich versuche die nun mit eine Klasse "Eintrag" und einer Klasse "Highscore" zu realisieren. Nun hab ich aber ein Problem mit dem Spielernamen in der Klasse "Eintrag"! Schaut's euch mal an:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <fstream>
#include <iostream>
#include <string>

using namespace std;

class CRaumschiff
{
public:

    void ZeigeDaten ();
    CRaumschiff ();
    void SetNull ();

private:

    int m_Punkte;
    string m_sName;
    float m_fSpeed;
};

// ZeigeDaten

//

void CRaumschiff::ZeigeDaten ()
{
    cout << "Name: " << m_sName << endl;
    cout << "Punkte: " << m_Punkte << endl;
    cout << "Geschwindigkeit: " << m_fSpeed << endl;
    cout << endl;
}

// SetNull

//

// Aufgabe: Attribute auf Null setzen

//

void CRaumschiff::SetNull ()
{
    m_sName = "";
    m_Punkte = 0;
    m_fSpeed = 0.0f;
} // SteNull


// Konstruktor

CRaumschiff::CRaumschiff ()
{
    m_Punkte = 1000;
    m_sName = "Spieler1";
    m_fSpeed = 22.5f;
}



// Hauptprogramm

//

int main ()
{
    // Variablen

    //

    CRaumschiff Jaeger;

    Jaeger.ZeigeDaten ();

    // Instanz in Datei schreiben

    ofstream Output ( "Highscore.hsg" , ios::binary);

    Output.write ((char*) &Jaeger, sizeof (Jaeger));

    Output.close ();

    // Instanz löschen

    Jaeger.SetNull ();

    Jaeger.ZeigeDaten ();

    // Instanz lesen

    ifstream Input ( "Highscore.hsg", ios::binary );

    Input.read ((char*) &Jaeger, sizeof (Jaeger));

    Input.close ();

    Jaeger.ZeigeDaten ();

    return 0;
}


Nun, alles läuft so weit so gut, nur wenn er dan die Datei geladen hat und diese ausgeben soll, dann kommen beim Spielernamen ganz komische Ergebnise zu Stande! Ich danke schon einmal im Vorraus... ;p

Stupidus

2

14.03.2006, 17:23

was steht denn in der datei?! warscheinlich auch nur mist ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Stupidus

Frischling

  • »Stupidus« ist der Autor dieses Themas

Beiträge: 41

Wohnort: Heilbronn

Beruf: Schöler

  • Private Nachricht senden

3

14.03.2006, 17:33

jo, aber trozdem mal der Inhalt:

è ÌÌÌÌAŒ   ´A

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

4

14.03.2006, 17:59

Ich denke der Hintergrund der Frage ist eher, wie du es dir vorstellst, dein Objekt erst nach char* zu casten und in eine Datei zu schreiben. Später willst du dann die Datei wieder auszulesen und erwartest, dass ein Objekt rauskommt?

Stupidus

Frischling

  • »Stupidus« ist der Autor dieses Themas

Beiträge: 41

Wohnort: Heilbronn

Beruf: Schöler

  • Private Nachricht senden

5

14.03.2006, 18:00

ja natürlich, im Buch wurde das ja schließlich auch so gemacht (Seite 252)

oder hab ich was falsch verstanden??

Anonymous

unregistriert

6

14.03.2006, 19:13

Konstante größen in Dateien schreiben, beim Lesen weiß das Programm net "Toll und wo ist der String zuende?"

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

7

14.03.2006, 20:19

Etwas verständlicher: :)

Du hast einen String z.B. "Hallo". dieser ist vom Typ char[6]. Er hat also 5+1 Zeichen (Das String Zuende Zeichen nicht vergessen!). Du schreibst also am besten erst die Länge UND dann den String. Beim einlesen weisst du wie lang der String ist und bekommst ein gültiges Ergebnis.

Stupidus

Frischling

  • »Stupidus« ist der Autor dieses Themas

Beiträge: 41

Wohnort: Heilbronn

Beruf: Schöler

  • Private Nachricht senden

8

14.03.2006, 21:10

jo kk thx, also sowas hab ich mir schon halber gedacht, aber wie setzte ich jetzt den Ratschlag von koschka um??

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

9

14.03.2006, 21:46

Indem du nicht das Objekt "Jaeger" sondern nur dessen Membervariablen einzeln speicherst.

Stupidus

Frischling

  • »Stupidus« ist der Autor dieses Themas

Beiträge: 41

Wohnort: Heilbronn

Beruf: Schöler

  • Private Nachricht senden

10

14.03.2006, 21:52

hmmm... k ich hatte gehofft, dass es noch eine einfachere Lösung gibt (da ich sehr, sehr faul bin, muss ich gestehen). Aber okay, also dann vielen Dank

wobei, eigentlich ist die Lösung ziemlich einfach :rolleyes:

Werbeanzeige