[SOLVED]Przeciążanie operatora <<(ostream, wlasna_klasa)

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Broi
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 12 kwie 2010, 12:38
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

[SOLVED]Przeciążanie operatora <<(ostream, wlasna_klasa)

Post autor: Broi »

Witam, właśnie od niedawna zaczynam bawić się nieco strumieniami i od razu pojawia się problem. Mianowicie piszę sobie bibliotekę do obsługi liczb zespolonych (od czegoś trzeba zacząć ;-) )i chciałbym przeciążyć operator << co by te liczby bezpośrednio wrzucać do couta. W internecie znalazłem następującą deklarację:

Kod: Zaznacz cały

ostream& operator << (ostream out, comp zespolona){ //... }
na co kompilator mi odpowiada:

Kod: Zaznacz cały

Complex.h:16: error: expected constructor, destructor, or type conversion before ?&? token
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: Przeciążanie operatora <<(ostream, wlasna_klasa)

Post autor: mikolajs »

Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: Przeciążanie operatora <<(ostream, wlasna_klasa)

Post autor: beluosus »

Gdzie tu jest przykład przeciążenia operatora, bo nie widzę?

ostream and istream operator for a class
Overload << (inserter)
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: Przeciążanie operatora <<(ostream, wlasna_klasa)

Post autor: mikolajs »

Sorry nie zrozumiałem pytania.
Myślałem że korzystasz z szablonu Complex, bo ten ma już zdefiniowany operator<<
Operator powinien chyba przyjmować jako argumenty referencje, ale błąd wygląda jakbyś nie dołączył pliku nagłówkowego ???
PS.
Do klasy dodajesz deklarację:

Kod: Zaznacz cały

friend std::ostream & operator<<(std::ostream& o, klasa& k);
Broi
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 12 kwie 2010, 12:38
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Przeciążanie operatora <<(ostream, wlasna_klasa)

Post autor: Broi »

Wciąż ten sam błąd... A może problem siedzi w samym tworzeniu pliku nagłówkowego? Bo powiem szczerze, że trochę nie czaję jak to działa. Mam pliki: Complex.h, Complex.cpp i test.cpp. Pliki Complex.cpp i test.cpp zawierają #include "Complex.h";, skąd jednak plik test.cpp bierze definicje funkcji, których deklaracje są w Complex.h? Definicje znajdują się przecież w Complex.cpp o którym w tescie nic nie wspominam...

Plik Complex.h:

Kod: Zaznacz cały

#ifndef _complex_h
#define _complex_h

class comp{
	private:
		double Re, Im;
	public:
		comp(double R=0, double I=0){Re=R;Im=I;}
		~comp(){};
		friend ostream &operator <<(ostream&, comp);
};



#endif
Plik Complex.cpp:

Kod: Zaznacz cały

#include <iostream>
#include "Complex.h"

ostream& operator <<(ostream& stream, comp x){
	if (x.Re != 0) stream << x.Re << (x.Im > 0) ? "+":"";
	if (x.Im != 0) stream << x.Im << "i";
	if (x.Im == 0 && x.Re == 0) stream << "0";
	return stream;
}
Plik test.cpp:

Kod: Zaznacz cały

#include <iostream>
#include "Complex.h"

using namespace std;

int main(){
	comp x(2,3);
	cout << x;
	return 0;
}
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: Przeciążanie operatora <<(ostream, wlasna_klasa)

Post autor: beluosus »

W complex nie masz zadeklarowanego typu ostream.

Kod: Zaznacz cały

#include <iostream>
using namespace std;
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Broi
Piegowaty Guziec
Piegowaty Guziec
Posty: 13
Rejestracja: 12 kwie 2010, 12:38
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: Przeciążanie operatora <<(ostream, wlasna_klasa)

Post autor: Broi »

I wszystko pięknie działa... :) Dzięki... :)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości