Nadawanie wartości obiektowi typu enum przez użytkownika
Ostatnio zmodyfikowano 2016-08-29 17:52
latajacaryba Temat założony przez niniejszego użytkownika |
Nadawanie wartości obiektowi typu enum przez użytkownika » 2016-08-29 15:29:37 Witam. Tworzę program i pomyślałem, że użycie enuma w byłoby niegłupim pomysłem. Problem pojawił sie kiedy chciałem, by użytkownik wpisywał wartość do obiektu. Napisałem w osobnym pliku przykład: #include <iostream> using namespace std; enum nowytyp { a, b }; int main() { nowytyp x; cin >> x; switch( x ) { case a: cout << "wybrales a "; break; case b: cout << "wybrales b"; } }
Niestety, błąd: ||=== Build: Debug in qqq (compiler: GNU GCC Compiler) ===| C:\Users\Pawel\Desktop\qqq\main.cpp||In function 'int main()':| C:\Users\Pawel\Desktop\qqq\main.cpp|10|error: cannot bind 'std::istream {aka std::basic_istream<char>}' lvalue to 'std::basic_istream<char>&&'| C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\istream|872|note: initializing argument 1 of 'std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&&, _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = nowytyp]'| ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===| Szukałem w internecie, niestety trafiłem na strony gdzie były rzeczy których nie za bardzo rozumiałem. Jeśli ktoś potrafi łopatologicznie wyjaśnić mi jak to zrobić będę bardzo wdzięczny :) |
|
Monika90 |
» 2016-08-29 16:39:45 Niestety, kompilator sam nie definiuje operatora >> do wczytywania danych dla typów enum i trzeba to zrobić ręcznie. Np. std::istream & operator >>( std::istream & in, nowytyp & x ) { std::string word; if( in >> word ) { if( word == "a" ) x = nowytyp::a; else if( word == "b" ) x = nowytyp::b; else in.setstate( std::ios::failbit ); } return in; }
|
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-08-29 17:52:13 o rany... To ja jednak zrezygnuje, ale może w przyszłości jak się podszkolę to skorzystam ;) Dzięki za pomoc. std::cout << "temat zamykam";
|
|
« 1 » |