istream przeładowanie

0

Zrobiłem taki przykładowy kod:

#include <iostream>
#include <string>
#include <string.h>
using namespace std;

class jakastam{
public:
	int lol;
	int lol2;
	int lol3;
istream& operator>>(istream& wej , jakastam j)
{
	wej >> j.lol;
	return wej;
}
};

int main()
{
	cin.ignore();cin.get();
} 

nie wiem dlaczego ale w visual 2012 nie działa ten kod a mianowicie wyrzuca błędy:

  • dwuargumentowy "operator >>" ma zbyt wiele parametrów

  • błąd w deklaracji funkcji; pomijanie treści funkcji

  • IntelliSense: too many parameters for this operator function

Pamiętam, że kiedyś mi takie coś działało (z ostream) tylko nie wiem w którym to było kompilatorze.
Ten kod był tylko kodem testowym więc chciałbym się zapytać czy po prostu ja coś mam źle napisane i ten kod naprawdę jest zły, czy trzeba zainstalować jakieś "patche"/dodatki do tego aby ten kod zadziałał ??
Kompilator: Microsoft Visual Studio 2012 Express Edition

1

Ten kod jest zły. Poszukaj o przeładowaniu operatora >> i << na potrzeby (i/o)stream.

Operatory >> i << są operatorami dwuargumentowymi, a Ty próbujesz je napisać jako trójargumentowe. Pamiętaj, że jednym niejawnym argumentem każdej metody w klasie/strukturze jest wskaźnik this. W skrócie: musisz zdefiniować ten operator poza klasą.

0
class jakastam
  {
   public:
   int lol,lol2,lol3;
  };
istream &operator>>(istream &wej,jakastam &j) { return wej>>j.lol; }
0

aha czyli te istream i ostream mają być spoza klasy :-) dziękuję :D

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