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

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

51

12.12.2006, 11:14

Überlad dir die Operatoren << und >> für deine Klasse und speicher alles schön der Reihe nach in deine Datei. Bei Typen wie std::basic_string< T, ... > musst du Irgendwas festlegen, das du die Länge des Strings später (beim auslesen) wieder raußfinden kannst, z.B. die Länge mitspeichern, eine Maximallänge definieren, etc...

grüße
@D13_Dreinig

52

13.12.2006, 23:17

nur noch als info, falls auch anfänger wie ich den thread mitverfolgt haben.


wenn man die strings nicht 100% benoetigt (das ist bei mir der fall) kann man statt std::string einfach char* verwenden, denn bei denen gibt es keine probleme zum abspeichern.


problem gibt es aber,wenn der name von einheiten eingegeben werden kann, wie in meinem fall beim held:

dafür hab ich aber auch eine lösung für euch dann parat:

eine namensabfrage koennte dann so aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
// Name ist ein char array [20] (kann auch beliebig erhoeht werden

// aber namen mit mehr als 20 zeichen sind komisch:D

// stName ist vom Typ char*

cout << "Gebt eurem Helden einen Namen:\n";
scanf("%19s", &Name[0]);
stName = Name;



und beim einladen benoetig ihr dann folgendes

C-/C++-Quelltext

1
2
3
4
5
6
7
8
// //////////////////////////////////////////////////////////////////////////

// ///////////////////////             Set Name        //////////////////////////

// //////////////////////////////////////////////////////////////////////////

// purpose :  - Sets Name

void CHero::SetName()
{
    stName = Name;
}   // end Set Name


das ist deswegen noetig, weil stName von anfang an nicht definiert ist, wie lange der string ist und somit auch nicht korrekt gespeichert/geladen werden kann (wurde auf den seiten zuvor ja schon erklärt).
das char array (Name) kann jedoch korrekt abgespeichert werden und somit kann der name auch wieder hergestellt werden.

für andere char* wie z.b. wenn ihr Klassennamen oder sonstiges habt z.b.:

Held Simon
Rang Todesritter

und Rang ebenfalls vom Typ char* ist braucht ich die SetName funktion nicht, weil Rang von anfang an definiert ist

C-/C++-Quelltext

1
char* Rang = "Todesritter";

und somit ein definiertes Ende besitzt.



so wollte das nur noch sagen, falls das wer brauch, der mit euren lösungsvorschläge noch nichts anfangen kann (sowie ich^^ dafür hab ich noch zu wenig erfahrung irgendwie:) ).


funktioniert bei mir einwandfrei und bei testern bis jetzt auch, also geh ich davon aus, dass es keine fehler beinhaltet :)

mfg
Simon

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

53

14.12.2006, 07:57

Wenn du schon mit C-Strings arbeitest (warum auch immer, du machst ja schließlich C++ und nicht C) solltest du wenigstens die C Funktionen zur Stringmanipulation verwenden, ansonsten kann ich dir versichern das du Probleme bekommen wirst!

Zitat



und Rang ebenfalls vom Typ char* ist braucht ich die SetName funktion nicht, weil Rang von anfang an definiert ist

C-/C++-Quelltext

1
2
3
  char* Rang = "Todesritter";

   und somit ein definiertes Ende besitzt.



Was du da meinst sollte const char* sein. Aber mal im ernst, wieso verwendest du nicht eine gescheite C++ Lösung? Im Endeffekt sparst du dir da viel Aufwand.

grüße
@D13_Dreinig

54

14.12.2006, 09:00

naja,weil ich vom wissensstand nur das Buch von David glaub ich ist es durchgelesen habe und an der uni nur 1 woche normalen C kurs hatte. somit bin ich bei weitem noch kein experte in C oder C++ und kann mit dingen wie "operatoren überladen" und ähnlichem noch nicht viel anfangen.

natürlich gibts sicherlich im internet dazu tutorials, aber bin atm nicht motiviert mir das durchzulesen und zu verstehen^^ in den weihnachtsferien jetzt bald ,werd ich mir dann wieder paar neue sachen durchlesen unter anderem sicherlich auch eure c++ string sachen :)


und zusatzaufwand hab ich mit den C strings ja eigentlich nicht gewaltig, nur dass ich halt jetzt bei den items mit dem namen bischen mehr herummurcksen muss^^ nix mehr mit string.insert etc :D

Werbeanzeige