Korrektur eines Scripts



  • // Beispiel für struct
    // Dieter Haß bearbeitet von Maximilian Hille
    // 17.11.2006

    #include <cstdlib>
    #include <iostream>
    using namespace std;

    int main() {
    struct mensch {
    char* vorname;
    char* nachname;
    int alter;
    int koerpergroesse;

    };
    mensch ich, du;

    cout << "Bitte in Reihenfolge aufschreiben: Vorname, Nachname, Alter und Körpergroesse in cm: " << endl;
    cin >> ich.vorname;
    cin >> ich.nachname;
    cin >> ich.alter;
    cin >> ich.koerpergroesse;
    du = ich;
    cout << du.nachname << ", " << du.vorname << " Alter: " << du.alter << du.koerpergroesse << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
    }

    haben wir in informatik un keiner weiß wies richtig ist, hilfe wäre nett :xmas1:



  • Hör auf deinen Compiler.


  • Mod

    fehlt noch ein #include <ostream> oder?



  • Nope, denn iostream erbt virtuell von ostream.


  • Mod

    Michael E. schrieb:

    Nope, denn iostream erbt virtuell von ostream.

    seit wann können header erben und was soll man darunter verstehen?

    P.S. schau mal nach, wo std::endl deklariert wird.

    natürlich ist das nicht das eigentliche problem - aber irgendwie hab ich keine lust auf char* und strings und den ganzen kram einzugehen.



  • Das hier:

    cin >> ich.vorname;
    

    kann nicht funktionieren, weil vorname ein char * ist. cin >> in Kombination mit char * oder char[] ist ansich schon eine extrem dumme Idee. Aber der char * zeigt in diesem Fall außerdem noch nirgendwo hin.

    vorname sollte eigentlich vom Typ std::string sein.



  • [Edit] Kompletter Unfug, den ich geschrieben hab.

    Ich hatte in Erinnerung, dass es eine Klasse iostream gibt, die von istream und ostream erbt und in iostream definiert wird.



  • Hm,

    ich sehe keine Garantie das durch den iostream Header auch der ostream Header eingebunden ist. Die Implementierung des ostreams könnte auch in magic.h geschehen und iostream als auch ostream header beziehen sich nur auf magic.h .

    Es sei denn natürlich, der Standard garantiert das durch includieren von iostream auch alles was in ostream steht bekannt gemacht wird.



  • In iostream werden unter anderem die Objekte cin und cout definiert.

    • cin ist ein Objekt vom Typ istream
    • cout ist ein Objekt vom Typ ostream

    <a href= schrieb:

    cppreference">The <iostream> library automatically defines a few standard objects:

    * cout, an object of the ostream class, which displays data to the standard output device.
    * cerr, another object of the ostream class that writes unbuffered output to the standard error device.
    * clog, like cerr, but uses buffered output.
    * cin, an object of the istream class that reads data from the standard input device.



  • Dann ist cppreference.com fehlerhaft, denn der Standard sagt:

    27.3.1 schrieb:

    The header <iostream> declares objects that associate objects with the standard C streams provided for by the functions declared in <cstdio> (27.8.2).

    Somit braucht <iostream> auch nur die Deklarationen von ostream und istream .

    [Edit] Oder? *gradverunsichert*


  • Mod

    Michael E. schrieb:

    Dann ist cppreference.com fehlerhaft, denn der Standard sagt:

    27.3.1 schrieb:

    The header <iostream> declares objects that associate objects with the standard C streams provided for by the functions declared in <cstdio> (27.8.2).

    Somit braucht <iostream> auch nur die Deklarationen von ostream und istream .

    [Edit] Oder? *gradverunsichert*

    richtig, <iostream> könnte so aussehen:

    namespace std
    {
    template<> struct char_traits;
    template <class charT, class traits = char_traits<charT> > class basic_istream;
    template <class charT, class traits = char_traits<charT> > class basic_ostream;
    typedef basic_istream<char> istream;
    typedef basic_ostream<char> ostream;
    typedef basic_istream<wchar_t> wistream;
    typedef basic_ostream<wchar_t> wostream;
    extern istream cin;
    extern ostream cout;
    extern ostream cerr;
    extern ostream clog;
    extern wistream wcin;
    extern wostream wcout;
    extern wostream wcerr;
    extern wostream wclog;
    }
    

    wichtig ist, dass die objekte nur deklariert und nicht definiert werden.


Anmelden zum Antworten