[C++] Przeciążanie operatora >>
Ostatnio zmodyfikowano 2015-02-19 19:22
kogut52 Temat założony przez niniejszego użytkownika |
[C++] Przeciążanie operatora >> » 2015-02-19 12:09:52 Witam potrzebuje pomocy przy przeciazaniu operatorow. a konkretnie przy przeciazaniu operatora >> walczylem z tym juz caly wieczor wczoraj i nadal nie ogarniam. podam dwa pliki: #ifndef ZESPOLONE_H #define ZESPOLONE_H #include<iostream>
class zespolone { double liczba1; double liczba2; public: zespolone(); zespolone( double wartosc1, double wartosc2 ); double modul(); double zmienianie( double re ); zespolone operator +( const zespolone & wartosc1 ); friend ostream & operator <<( const ostream & wyjscie, const zespolone s ); ~zespolone(); protected: double Re; double Im; };
#endif
#include "zespolone.h" #include<iostream> #include<cstdlib> #include<cmath> using namespace std;
zespolone::zespolone( double wartosc1, double wartosc2 ) : Re( wartosc1 ) , Im( wartosc2 ) { liczba1 = wartosc1; liczba2 = wartosc2; cout << "klasa utworzona"; cout << "re : " << Re; cout << "im : " << Im; } zespolone::~zespolone() { cout << "oto destruktor"; }
double zespolone::modul() { return sqrt( Re * Re + Im * Im ); }
double zespolone::zmienianie( double re ) { double a; cout << "podaj nowa wartosc liczby rzeczywistej"; cin >> a; a = re; return re; }
zespolone zespolone::operator +( const zespolone & wartosc1 ) { return zespolone( wartosc1.Re + liczba1, wartosc1.Im + liczba2 ); }
zespolone::ostream & operator <<( const ostream & wyjscie, const zespolone & s ) { return wyjscie << "wartosc rzeczywista liczby zespolonej to: " << s.liczba1 << "wartosc urojona to: " << s.liczba2 << endl; }
blendy to: error:'ostream'does not name a type error:'ostream' in 'class zespolone'does not name a type |
|
darko202 |
» 2015-02-19 12:42:47 dawno tego nie robiłem, ale patrząc na http://pl.wikibooks.org/wiki/C++/Przeci%C4%85%C5%BCanie_operator%C3%B3wclass Student { ... friend ostream & operator <<( ostream & wyjscie, const Student & s ); };
ostream & operator <<( ostream & wyjscie, const Student & s ) { return wyjscie << "Nr indeksu: " << s.nr_indeksu << endl << "Srednia ocen: " << s.srednia_ocen << endl; }
i kod u Ciebie class zespolone { ... friend ostream & operator <<( const ostream & wyjscie, const zespolone s ); ... };
zespolone::ostream & operator <<( const ostream & wyjscie, const zespolone & s ) { return wyjscie << "wartosc rzeczywista liczby zespolonej to: " << s.liczba1 << "wartosc urojona to: " << s.liczba2 << endl; }
odwołanie zespolone:: jest niepotrzebne informuje o tym kompilator " error:'ostream' in 'class zespolone'does not name a type" użyj ostream & operator <<( const ostream & wyjscie, const zespolone & s ) popatrz też na: http://cpp0x.pl/artykuly/?id=15 |
|
Fireho |
» 2015-02-19 13:14:26 Ten operator<< nie będzie metodą klasy zespolone, tylko zaprzyjaźnioną funkcją globalną. Nie będzie miał dostępu do wskaźnika this oraz nie trzeba pisać przestrzeni nazw zespolone. Oprócz tego zrobiłeś to źle, bo ostream & operator <<( ostream & wejscie, const zespolone s ) to nie to samo co ostream & operator <<( ostream & wejscie, const zespolone & s ) Podsumowując: musisz usunąć te zespolone:: oraz zamienić te nagłówki funkcji na jakąś wspólną wersję. |
|
kogut52 Temat założony przez niniejszego użytkownika |
» 2015-02-19 13:55:18 ogarnolem to przerzucajac wszystko do czesci publicznej chcoiaz pewnie nie powinienem tego tak robic..zostal mi tylko blad odnosnie 'ostream'does not a type |
|
Lora |
» 2015-02-19 15:12:40 Powinno być std::ostream . W pliku nagłówkowym nie dałeś dyrektywy using namespace std; . I w sumie dobrze, bo nie powinno się jej używać, ale możesz na górze pliku nagłówkowego wpisać using std::ostream; . |
|
kogut52 Temat założony przez niniejszego użytkownika |
» 2015-02-19 19:22:52 dzieki poszlo:) |
|
« 1 » |