cin.getline zu grosse Eingabe
-
Vielen Dank
Ich werds später genauer anschauen. Mit vectoren habe ich mich schon ein wenig befasst.
-
Ich kämpfe gerade etwas mit den Klassen, da ich bis jetzt immer structs verwendet hab.
Das meiste ist mir schon klar, aber ich müsste doch die klasse mit
CMyClass test;
initialisieren können und sie dann zb wie folgt benutzen:
test.set_name("Test");Geht leider nicht, error C2512: 'CMyClass': Kein geeigneter Standardkonstruktor verfügbar
Bestimmt mein Fehler
Danke
-
Das Problem ist, dass ich keinen Konstruktor reingebaut habe, welcher keine Parameter Aktzeptiert. Das kann man aber leicht ergänzen:
CMyClass() : m_Name() , m_Infos() { }Das ist ein Defaultkonstruktor. Er nimmt keine Parameter und konstruiert das Objekt.
Bisher würde es nur so funktionieren:
CMyClass Test("test", "was anderes"); // Name und Infos werden gleich initialisiert.Grüssli
PS: Ich empfehle aber wirklich dringend ein gutes Buch

-
Ah super, das mit dem Konstruktor funktioniert. Wofür steht das : , vor m_Name/m_Infos?
Kann man auch direkt auf die Klassen zugreifen. zB:
cout << test.m_Name;Jetzt gibt es ja eine Fehlermeldung weil man kein Zugriff auf private Elemente hat.
Ich bestelle mir wohl den C++ Primer, das Buch hört sich gut an. Danke
MfG
-
Typhoon schrieb:
Ah super, das mit dem Konstruktor funktioniert. Wofür steht das : , vor m_Name/m_Infos?
Der Doppelpunkt zeigt den Beginn der Initialisierungsliste an. Die Initialisierungsliste ist dafür da, ein Objekt gleich bei der Erstellung mit einem bestimmten Wert zu befüllen. Sonst würde einfach der Standardkonstruktor aufgerufen oder bei primitiven Typen würde irgendwelchen Müll drinstehen, welcher vom letzten Objekt stammt, welches an diesem Speicherplatz war.
Typhoon schrieb:
Kann man auch direkt auf die Klassen zugreifen. zB:
cout << test.m_Name;Nein, das will man sogar bewusst verhindern. Sowas ist Fehleranfällig und man kann den Zugriff schlecht mitverfolgen, falls man es möchte. Daher immer die Member der Klasse private machen und entsprechende Methoden (Setter, Getter) anbieten.
std::cout << test.get_name();Typhoon schrieb:
Ich bestelle mir wohl den C++ Primer, das Buch hört sich gut an.
Es wird immer wieder oft empfohlen, da es eine gute Einstiegslektüre mit trotzdem gutem Tiefgang sein soll.
Typhoon schrieb:
Danke
Keine Ursache.
Grüssli
-
Ich beneide dich. Du schüttelst das so aus dem Handgelenk

Das mit dem private habe ich gerade in einem Tutorial gelesen und ist mir alles klar.
Jedoch habe ich noch eine Bitte, kannst du mit einem kleinen Beispiel erklären wie man das read_to write_to verwendet?
Danke
-
Typhoon schrieb:
Ich beneide dich. Du schüttelst das so aus dem Handgelenk

Glaub mir. Das kannst du schneller, als du denkst auch.

Nichts desto trotzt gibts bei C++ immer etwas zu lernen.
-
Abend
Kriege die Klasse immer noch nicht gespeichert.
ofstream ofs("output.bin", ios::binary); ofs.write((char *)&test, sizeof(test));Müsste funktionieren, aber kriege immer nur eine leere Datei.

Jemand eine bessere Idee oder was mache ich falsch?
-
Bist du sicher, dass die Datei leer ist,oder du einfach nichts siehst?
Du schreibst ja binär rein, da kannst du dann nicht mit einem normalen Editor öffen. Wenn du siher sein willst, benutzt einen Hex Editor, oder schreib als Text rein.
-
Hab einen Hex Editor (UltraEdit ist ein super Prog)
Lag wohl an mir, aufeinmal gehts.Drakon du weisst nicht zufällig wie man die Klassen-Methode von dravere benutzt?
void write_to(ostream& rOutput) { rOutput.write(m_Name.c_str(), m_Name.size() + 1); rOutput.write(m_Infos.c_str(), m_Infos.size() + 1); } void read_from(istream& rInput) { getline(rInput, m_Name, '\0'); getline(rInput, m_Infos, '\0'); }Würde mich auch sehr interessieren.
Danke
-
Du übergibst einfach den stream, wo du die Daten reinschreiben/auslesen willst.
write_to(std::cout); std::ofstream out ("out.txt"); write_to (out);
-
Funktioniert auch.
Danke für die vielen Tipps, ihr seid die besten!
