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

11

31.03.2011, 15:48

Ich benutze boost::serialization. Die Einarbeitung dauert ein wenig, aber dann kann man das eigentlich recht schön benutzen.
Lieber dumm fragen, als dumm bleiben!

Wirago

Alter Hase

  • »Wirago« ist der Autor dieses Themas

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

12

31.03.2011, 17:07

Das kann schon sein, dass der Faxen gemacht hat, je nachdem, wie Du es programmiert hast. Aber static sollte man wirklich vermeiden. Notfalls schau nochmal in ein Buch, wie Attribute von Klassen funktionieren.
wenn ich das static wegpack kommt vom compiler: "Die erneute Deklaration der Memberfunktion ist unzulässig" sowie "Ungültiger Verweis auf nicht-statischen Member 'CSoldat::Anzahl_Schwertkaempfer' " und "'Typumwandlung': 'int CSoldat::* ' kann nicht in 'char *' konvertiert werden" das dann halt für jede variable im public der basisklasse. dann lieber doch mit static am anfang ^^

das speichern und laden hab ich auf das geändert. sieht wirklich schlanker aus, hätt ich eig selber drauf kommen MÜSSEN /facepalm

speichern:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void speichern ()
{
    ofstream Output ("Save.sav", ios::binary);
    Output.write ((char*) &Gold, sizeof (Gold));
    Output.write ((char*) &Rohstoff_Holz, sizeof (Rohstoff_Holz));
    Output.write ((char*) &Rohstoff_Eisen, sizeof (Rohstoff_Eisen));
    Output.write ((char*) &Bevoelkerung, sizeof (Bevoelkerung));
    Output.write ((char*) &CSoldat::Anzahl_Bogenschuetze, sizeof (CSoldat::Anzahl_Bogenschuetze));
    Output.write ((char*) &CSoldat::Anzahl_Katapult, sizeof (CSoldat::Anzahl_Katapult));
    Output.write ((char*) &CSoldat::Anzahl_Reiter, sizeof (CSoldat::Anzahl_Reiter));
    Output.write ((char*) &CSoldat::Anzahl_Schwertkaempfer, sizeof (CSoldat::Anzahl_Schwertkaempfer));
    Output.close ();

    cout << "Gespeichert." << endl;
};


laden:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void laden ()
{
    ifstream Input ("Save.sav", ios::binary);
    Input.read ((char*) &Gold, sizeof (Gold));
    Input.read ((char*) &Rohstoff_Holz, sizeof (Rohstoff_Holz));
    Input.read ((char*) &Rohstoff_Eisen, sizeof (Rohstoff_Eisen));
    Input.read ((char*) &Bevoelkerung, sizeof (Bevoelkerung));
    Input.read ((char*) &CSoldat::Anzahl_Bogenschuetze, sizeof (CSoldat::Anzahl_Bogenschuetze));
    Input.read ((char*) &CSoldat::Anzahl_Katapult, sizeof (CSoldat::Anzahl_Katapult));
    Input.read ((char*) &CSoldat::Anzahl_Reiter, sizeof (CSoldat::Anzahl_Reiter));
    Input.read ((char*) &CSoldat::Anzahl_Schwertkaempfer, sizeof (CSoldat::Anzahl_Schwertkaempfer));
    Input.close ();


    cout << "Geladen." << endl;
}

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

31.03.2011, 17:10

Wie ich schon sagte. Schau Dir nochmal an, wie man mit Klassen und Attributen richtig umgeht und auch das Thema Dependency Injection.
Wenn Du keine Instanzen übergibst und Syntax zum Ansprechen statischer Variablen verwendest, dann geht es natürlich auch nur statisch.
Dennoch ist das sehr sehr schlechtes Design und zeugt von großem Unverständnis der von Dir verwendeten Programmiersprache.

Als weiteren Tipp würde ich Dir den Stream-Operator für ofstream und ifstream an's Herz legen. Damit sparst Du Dir viel unnötigen und unsicheren Code wie den da oben.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

14

31.03.2011, 17:11

wieso wundert es dich, dass dieser fehler kommt? da die variablen jetzt nichtmehr für alle instanzen von soldat gelten brauchst du einen zeiger auf die instanz um darauf zu zu greifen. dir fehlen wohl ein paar grundlagen. schnapp dir dein buch und hol es nach.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

15

31.03.2011, 17:16

Um mal nicht wieder herzlos zu erscheinen, hier ein Vorschlag:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void someClass::save ( const CSoldier& soldier )
{
    ofstream output ("Save.sav", ios::binary);

    unsigned int fileVersion = 0;
    output << fileVersion;

    output << gold;
    output << wood;
    output << iron;
    output << population;
    output << soldier.getArcherCount();
    output << soldier.getCatapultCount();
    output << soldier.getRiderCount();
    output << soldier.getSwordCount();
    output.close ();

    cout << "Gespeichert." << endl;
};


Noch besser wäre sicherlich:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void someClass::save ( const CSoldier& soldier )
{
    ofstream output ("Save.sav", ios::binary);

    unsigned int fileVersion = 0;
    output << fileVersion;

    output << gold;
    output << wood;
    output << iron;
    output << population;

    output << soldier;
    // wahlweise:
    // soldier.save ( output );

    cout << "Gespeichert." << endl;
};
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Wirago

Alter Hase

  • »Wirago« ist der Autor dieses Themas

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

16

31.03.2011, 17:53

ok, ich sehs schon. da hab ich noch viel vor mir was klassen angeht.
is aber halt so, dass das zT von euch genannte in dem buch nciht vorkommt (also das codebeispiel von cobold zb :S )
wobei ich mich eigentl. frag wieso ich Anzahl_[randomUnit] überhaupt in ne klasse gepackt hab, bringt eig nix außer arbeit :wacko:

naja... bedarf noch alles ein wenig übung. danke euch beiden für die anregungen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

31.03.2011, 17:59

Arbeit vielleicht, aber Klassen sind nicht dafür da um Arbeit zu sparen, sondern um eine gute logische Struktur in den Code zu bekommen. Eine einzelne Funktion, viele Variablen und 'ne Haufen GOTOs würden's auch tun. Aber eben unübersichtlich.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Wirago

Alter Hase

  • »Wirago« ist der Autor dieses Themas

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

18

31.03.2011, 18:07

jop is richtig, merk nur grad, dass ich zu beginn in der basisklasse nen ziemlichen unsinn gemacht hab und sich das eben durch den gesamten code zieht. so enstehen dann eben so dinge wie oben wo man sich iwie mit der linken hand am rechten ohr kratzt. :cursing:
naja... s nächste projekt wird besser. :S

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

19

31.03.2011, 18:27

So ist das am Anfang. Und genau deswegen gibt es Klassen. Damit da Ordnung rein kommt. Allerdings sollte man sich da vorher ein Konzept und eine Struktur ausdenken.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

20

01.04.2011, 01:12

ui ui ui .... wenn du deinen struct und class einen operator<< verpasst, kannst du die wundervoll in eine datei oder sonstige ausgabe schreiben (bzw. operator>> einlesen) nja bei mehrmals aufeinander folgenden structs kannst du die i/ostream_iteratoren nutzen und dann ist auch das ein kinderspiel :)
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

Werbeanzeige