Stringstream initialisieren
-
Hi,
wie kann ich einen Stringstream initialisieren?
Die Komponentenfunktion wird mehrmals mit einem String als Parameter aufgerufen, der in eine Zahl konvertiert wird. Allerdings behält StrStr den Wert vom ersten Aufrufclass File { private: std::stringstream StrStr; long double Zahl; //... public: //... const long double MakeNum(const std::string Str) { StrStr.seekp(0); StrStr << Str; StrStr >> Zahl; return Zahl; } //...
MfG, Neo2k3
-
dann mach ihn mit der str memberfunktion wieder leer.
-
aber schöner wärs wenn du immer nen neuen stringstream in MakeNum erstellst
-
Was für eine Str-Memberfunktion?
Ich dachte mir es ist übersichtlicher und sicherer die Variablen als private zu deklarieren?Neo2k3
-
class File { private: std::stringstream StrStr; long double Zahl; //... public: //... const long double MakeNum(const std::string Str) { StrStr.str(""); StrStr << Str; StrStr >> Zahl; return Zahl; } //...
oder
class File { private: long double Zahl; //... public: //... const long double MakeNum(const std::string Str) { std::stringstream StrStr; StrStr << Str; StrStr >> Zahl; return Zahl; } //...
-
hmm, da geht leider nur die zweite Methode.
Ich versteh nicht, warum man den Stream nicht leeren kann...Hoffe du hast noch ne Idee.
-
hmmmmm, das muss funktionieren
-
Wenn du in der 1. Version MakeNum() das 2. mal aufrufst ist das fail-bit in stringstream gesetzt. Wegen eof.
so gehts:class File { private: std::stringstream StrStr; long double Zahl; //... public: //... const long double MakeNum(const std::string Str) { StrStr.clear(); StrStr.str(""); StrStr << Str; StrStr >> Zahl; return Zahl; } };
Kurt
-
Ahh jo, danke
-
Die beiden Variablen gehören als lokale Variablen in die MakeNum()-Funktion die wiederrum static sein soll imho.
MfG SideWinder
-
die wiederrum static sein soll imho
WTF?
-
the daily wtf schrieb:
die wiederrum static sein soll imho
WTF?
er meint:
static double MakeNum(const std::string& Str) {
-
OK bei der Gelegenheit:
Warum static und warum als Referenz?
-
Warum static?
Warum nicht?
Und warum als Referenz?
Warum nicht?
-
Die Übergabe by-const-reference statt by-value hilft bei Objekten Zeit für Kopien zu sparen. by-const-reference benötigt intern bloß die Kopie des Zeigers (4 bzw. 8 Byte) der auf das Objekt zeigt, by-value benötigt eine Kopie des gesamten Strings (1 * Länge des Strings Bytes + eventl. Overhead).
Static ist eine Angewohnheit die ich mir erst in Java angeeignet habe: Alles was nicht unbedingt Zugriff auf Member-Variablen benötigt fällt unter die Kategorie "Util" und kann genausogut static sein. In wie fern das auch unter C++ toll ist, kann ich dir nicht sagen, ich sehe es derzeit als guten Stil an.
MfG SideWinder