Przeładowanie iostream dla enum

0

Witam. Prówbuje w programie stworzyc przeładowanie operatora wejścia dla typu wyliczeniowego enum tak aby móc użyć w programie

cin>>arg1// arg1 jest typem wyliczeniowym enum.

próbuję zorobić to w ten sposób:

Symbol konwersja(char *arg)
{
	switch(*arg)
	{
	case 'e': return e;
	case 'a': return a;
	case 'b': return b;
	case 'c': return c;
	case 'd': return d;
	default:
		return f;
	}
return f;
}
istream& operator >>(istream& Wejscie, Symbol & arg1)
{
	char temp;
	Wejscie>>temp;
	arg1=konwersja(&temp);
	return Wejscie;

}
void odczyt(Symbol *arg1, Symbol *arg2,char *znak)
{
	cout<<"wprowadz odpowiedz"<<endl;
	cin >>*arg1;// tu się pojawia błąd: no match for ‘operator>>’ in ‘std::cin >> * arg1’
	cin>>*znak;
	cin>>*arg2;//tu się pojawia błąd: no match for ‘operator>>’ in ‘std::cin >> * arg1’
	cout<<*arg1;
}

Nie weim gdzie popełniam błąd. Pierwszy raz używam przeładowania tego operatora. Proszę o pomoc.

0
Tomek93 napisał(a):

Proszę o pomoc.

#include <iostream>

struct X {
int x;
int x2;
};

std::istream& operator>>( std::istream &cin , X &x)
{
cin>>x.x;
x.x2 = x.x * x.x;
return cin;
}

std::ostream& operator<<( std::ostream &cout , const X &x)
{
cout<<x.x<<"*"<<x.x<<"="<<x.x2<<std::endl;
return cout;
}

int main(int argc, char *argv[]) {
X x;
std::cin>>x;
std::cout<<x;
return 0;
}

0

No ok ale ja musze pracować na enum więc jako argument przeładowania daję Symbol & x. I nadal nie rozumiem skąd ten błąd.

0

Kod, który podałeś, kompiluje się poprawnie: http://ideone.com/mWlT3y

To, co kompilujesz Ty, musi być inne. Ogólnie ten kod jest straszliwy: robisz to źle™.

0

Temat do zamknięcia. Przyczyna błędu banalna. Pominąłem deklarację w pliku nagłówkowym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1