004
21.04.2017, 17:56 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
Zitat: |
Nichtmal das funktioniert, obwohl 1:1 von Youtube abgeschrieben.
|
Kann es auch nicht. ist ziemlicher "murks".
1. Serialization sollte von "lager" selbst gemacht werden (Memberfunktionen) 2. sizeof(lager) gibt vermutlich 8 (32bit-system) bzw 12 aus (64bit) , da "string" ein komplexer Typ ist.
Sinnvoller ist vermutlich sich lade + schreibfunktionen in "lager" zu implementieren.
Eine Idee ist, welche man auch für Ausgabe auf der Konsole benutzen kann:
Mal so ohne "Gewehr" aus der Hüfte geschossen:
C++: |
class lager { public:
std::string name; int bestand;
// Klassen-daten in form von "name bestand" in stream schreiben std::ostream& operator<<(std::ostream& out) { out << name << " " << bestand << "\n"; return out; }
// aus stream lesen, keinerlei fehler abfragen, aber es geht in ums beispiel // name darf kein leerzeichen enthalten std::istream& operator>> (std::istream& in); { std:string line; std::getline(in, line); std::ostringstream i(line); i >> name; i >> bestand; return in; }
};
int main() { lager artikel; artikel.name = "Hammer"; artikel.bestand = 500;
std::ofstream schreiben("artikel.blt"); schreiben << artikel; schreiben.close();
lager artikel2; std::ifstream lesen("artikel.blt"); // hier hattest du öffnen der datei und lesen durcheinander gebracht! lesen >> artikel2; lesen.close();
assert(artikel2 == artikel);
std::cerr << "Artikel:" << artikel << std::endl; std::cerr << "Artikel2:" << artikel2 << std::endl; }
|
Zur Initialisierung solltest du ebenfalls einen Konstruktor in lager hinzufügen, sowie die Variablen nur über getter&setter zugreifbar machen, sonst kann dir jeder "fremde" in deinem Artikel rumpfuschen. Kapselung ist da das stichwort. -- class God : public ChuckNorris { }; Dieser Post wurde am 21.04.2017 um 17:57 Uhr von FloSoft editiert. |