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_type ist nur ein Integer, keine Stringklasse. Er wird einfach für Grössenangaben im Zusammenhang mit std::string verwendet (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


Anmelden zum Antworten