Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Nadawanie wartości obiektowi typu enum przez użytkownika

Ostatnio zmodyfikowano 2016-08-29 17:52
Autor Wiadomość
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:
C/C++
#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 :)
P-151203
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.

C/C++
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;
}
P-151212
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.
C/C++
std::cout << "temat zamykam";
P-151221
« 1 »
  Strona 1 z 1