Problem z przeciążeniem wyjscia

0
#include <iostream>
#define TYP LiczbaZespolona 

using namespace std;

struct Wektor {
  TYP  x;
  TYP  y;
};

struct LiczbaZespolona {
  double  re;
  double  im;
};

//... dalej w programie


void Test(){
	
      Wektor V;  // powiedzmy ze ręcznie przypiszę wartosci
       V.x.re=7;
       V.x.im=8;
       V.y.re=3;
       V.y.im=12;
       
       
      cout << V<<endl;  // chce wyswietlic ladnie wektor
   }
   
   
   
   ostream & operator << ( ostream & wyjscie , Wektor & V){   // wysw wektor zespolony 2x1
	   
	   cout << "(  "<< V.x<",  "<<V.y<<"  )"<<endl;
	   
	   return wyjscie;}
	   
	   
 ostream & operator << (ostream & output, LiczbaZespolona & Zesp ) {
	
	output <<"("<<Zesp.re<<showpos<<Zesp.im<<noshowpos<<"i)"; 

	return output; 
}	 

Dlaczego to nie działa ? Spodziewałbym sie po tym takiego wyniku :
( (7+8i), (3+12i) )

Niestety jest problem w wykonaniem pierwszego przeciążenia, nie pytajcie dlaczego struktury są w takiej zależności w jakiej są, mam to narzucone z góry i nie mogę zmienić.
Wydaje mi się być wszystko ok .

1

Wymień miejscami deklaracji Wektor i LiczbaZespolona

Możesz uprościć:

ostream &operator<<(ostream &s,const Wektor &V) { return s<<"(  "<<V.x<<",  "<<V.y<<"  )"; } // tu nie dawaj endl
ostream &operator<<(ostream &s,const LiczbaZespolona &Z) { return s<<"("<<Z.re<<showpos<<Z.im<<noshowpos<<"i)"; }
0
_13th_Dragon napisał(a):

Wymień miejscami deklaracji Wektor i LiczbaZespolona

W rzeczywistości mam poprawną kolejność, walnąłem się przy kopiowaniu tutaj, bo mam te deklaracje w różnych modułach.

0

W kodzie, który wkleiłeś błędna jest kolejność definicji struktur i funkcji operatorów. To już wiemy. Poza tym w operatorze dla Wektor jest cout zamiast wyjscie a przy V.x jest < zamiast <<.

Po poprawkach działa jak chciałeś: http://ideone.com/38yrwG Gdybyś formatował kod jakoś normalniej od razu było by widać ten < (http://ideone.com/u2Tehj).

0

jmjnmmmmmmm

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