[gelöst] Fehler bei enum in struct



  • Hallo Zusammen
    Ich bin neu in C++ und in diesem Forum.

    Bei Erstellen eines Programm das zur Erfassung von Personalien und Adresse dienen soll. Gibt der Compiler einen Fehler aus und bricht ab. Das Problem stellt eine Enumeration dar auf welche eine Struktur zurück greift.

    #include <iostream> 
    #include <string>
    
    enum land 
    { 
      Deutschland, Oesterreich, Schweiz 
    }; 
    struct adresse
    {
      land Land; 
    };
    int main()
    {
      adresse Adresse;
      std::cout << "Land: " << std::flush;
      std::cin >> Adresse.Land;
    }
    

    Trotz Google-Suche, habe ich keine Idee mehr wo der Fehler sein könnte.



  • housyharry schrieb:

    Trotz Google-Suche, habe ich keine Idee mehr wo der Fehler sein könnte.

    Trotz Posting-Suche, habe ich keine Idee mehr wo die Fehlermeldung sein könnte.



  • ...
    In file included from /usr/include/c++/4.8/string:53:0,
                     from /usr/include/c++/4.8/bits/locale_classes.h:40,
                     from /usr/include/c++/4.8/bits/ios_base.h:41,
                     from /usr/include/c++/4.8/ios:42,
                     from /usr/include/c++/4.8/ostream:38,
                     from /usr/include/c++/4.8/iostream:39,
                     from test.cpp:1:
    /usr/include/c++/4.8/bits/basic_string.tcc:996:5: note: template<class _CharT, class _Traits, class _Alloc> std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, std::basic_string<_CharT, _Traits, _Alloc>&)
         operator>>(basic_istream<_CharT, _Traits>& __in,
         ^
    /usr/include/c++/4.8/bits/basic_string.tcc:996:5: note:   template argument deduction/substitution failed:
    test.cpp:16:23: note:   mismatched types ‘std::basic_string<_CharT, _Traits, _Alloc>’ and ‘land’
       std::cin >> Adresse.Land;
                           ^
    

    Reicht das? oder braucht es die ganze Fehlermeldung?


  • Mod

    Es gibt keine vordefinierte Eingabefunktion für enum-Typen. Wie sollte diese deiner Meinung nach aussehen? Wie auch immer deine Antwort lautet: Das musst du dann selber programmieren.



  • OK, ich glaube langsam blicke ich durch.
    Ich habe es folgendermassen gelöst:

    #include <iostream> 
    #include <string>
    
    enum land 
    { 
      Deutschland, Oesterreich, Schweiz 
    }; 
    struct adresse
    {
      land Land; 
    };
    int main()
    {
      adresse Adresse;
      int Land;
      std::cout << "Land 0(Deutschland), 1 (Östereich), 2 (Schweiz): " << std::flush;
      std::cin >> Land;
      Adresse.Land = static_cast<land>(Land);
    }
    

  • Mod

    Ja, so geht das.

    Die Streams haben übrigens ein wenig bekanntes Feature, dass man zwei Streams zusammenbinden kann, so dass Ausgabeoperationen auf einem Stream automatisch geflushed werden, bevor eine Eingabeoperation auf dem anderen statt findet. cin und cout sind bereits auf diese Weise verbunden. Das heißt, das flush am Ende deiner Ausgabe kannst du dir sparen, ohne zu befürchten, dass die Eingabeaufforderung nicht rechtzeitig erscheint.



  • Danke, das ist hilfreich.

    Setze den Thread auf gelöst.
    Wobei ich später bestimmt elegantere Lösungen finden werde.


Anmelden zum Antworten