getline und string::size_type
-
Hallo!
Bin noch blutiger C++ Anfänger und verwende den C++ Primer als "Lernbuch". Nun habe ich ein wenig rumgebastelt (simpelst) und komme hier nicht weiter:#include <string> #include <iostream> using std::cin; using std::cout; using std::string; using std::endl; main() { string satz; string::size_type zaehler; getline(cin, satz); cout << satz << endl; cout << "Der eingegebene Satz hatte inkl. Leerzeichen: " << satz.size() << " Zeichen" << endl; cout << "Welches Zeichen soll ich erkennen?"; cin >> zaehler; cout << "Das Zeichen war ein: " << satz[zaehler] << endl; return 0; }Das Programm liest einen Satz ein zählt die Zeichen und lässt den User wählen welches Zeichen erkannt werden soll. Soweit sogut (funkioniert auch).
Im Primer steht jedoch dass string::size_type dafür gedacht ist eine extrem große Anzahl von Zeichen aufzunehmen (wenn man zb viele Zeichen in ne Variable speichert).
Damit wäre ja eigentlich eher meine Variable satz als string::size_type zu definieren. (es gibt ja auch lange Sätze Zeichenfolgen...)
Nur sobald ich meine Variablen so umdefiniere:
[b]string::size_type satz;[/b] string::size_type zaehler;..schreit der Kompiler:
sizetype.cpp:11: error: invalid conversion from ‘void’ to ‘char**’
sizetype.cpp:11: error: invalid conversion from ‘size_t’ to ‘size_t*’
/usr/include/stdio.h:649: error: too few arguments to function ‘__ssize_t getline(char**, size_t*, FILE*)’
sizetype.cpp:11: error: at this point in file
sizetype.cpp:13: error: request for member ‘size’ in ‘satz’, which is of non-class type ‘size_t’
sizetype.cpp:16: error: invalid types ‘size_t[size_t]’ for array subscript
*Wo hakt es hier? Liegt es daran das getline kein string::size_type einlesen kann?
Es ist doch sinnvoll, die Variable die Zeichenfolgen einliest, mittels "string::size_type" zu definieren, oder?
Vielen Dank im Voraus!
LG
-
std::string::size_typeist nur ein Integer, keine Stringklasse. Er wird einfach für Grössenangaben im Zusammenhang mitstd::stringverwendet (in der Standardbibliothek haben viele Klassen ihre eigenen Typen).Verwende also weiterhin
std::string.
-
Hallo!
Danke für die Info, da hatte ich wohl etwas falsch verstanden.
LG