Überladener << Operator gibt immer nur Speicheradresse aus

Jennesta

Erfahrenes Mitglied
Hallo,
ich habe irgendwie das Problem das der überladene Operator mir immer nur die Speicheradresse ausgibt.
Ich habe im Hauptprogramm folgendes stehen:

Code:
ostream& operator<<(ostream& os, Fahrzeug& fahrzeug) {
	os << fahrzeug.ostreamAusgabe(os);
	return os;
}

//irgendwo im Programm
cout << PKW_vec[i];
In dem vector sind die Zeiger auf diverse Elemente von Klassen gespeichert.

In der Fahrzeugklasse ist dann die Funktion, die dem "os" alle privaten Variablen übergeben soll.

Code:
ostream& Fahrzeug::ostreamAusgabe(ostream& os) {
	os << endl;
	os << resetiosflags(ios::right) << setiosflags(ios::left);
	os.width(4); // Breite 4 für ID
	os << p_iID; //...
	return os;
}

diese Funktion wurde hier im Fahrzeug als Virtuell deklariert und in den abgeleiteten Klassen folgendermaßen aufgegriffen

Code:
ostream& PKW::ostreamAusgabe(ostream& os) {
	Fahrzeug::ostreamAusgabe(os);
	os << // weitere Variablen
	return os;
}

Wie gesagt das Problem ist das "cout <<
Code:
PKW_vec[i];
" immer nur eine hexadezimale Zahl ausgibt und mehr nichts.
Ich habe auch versucht im Hauptprogramm den Vektor zu dereferenzieren oder sonstigen Murks zu machen, den ich von normalen Zeigern her kenne wenn ich zwischen Adresse und Inhat springen möchte aber das hat nur Compiler-Fehler produziert. Wäre klasse wenn jemand mehr sieht als ich.

Grüße Jennesta
 
Hi.

Wie ist PKW_vec definiert?

Du sagtest irgendwas davon, dass dort Zeiger drin sind? Dann müßtest du die dereferenzieren.

Gruß
 
Hi,
also der vector ist folgendermaßen gemacht

Code:
vector<PKW*> PKW_vec;
PKW* p1 = NULL;
p1 = new PKW(sName, dMaxSpeed, dVerbrauch, dTankvol);
PKW_vec.push_back(p1);

Die normale Ausgabe der Werte klappt übrigens, also mittels einer Ausgabefunktion in den Klassen und "cout << bla bla"


€dit
Code:
PKW_vec[i]->vAbfertigung();
cout << PKW_vec[i];
Hier noch ein beispiel. Die Methode die ich eine Zeile darüber aufrufe wird auch ausgeführt.
auch wenn ich ein "&" vor PKW_vec[i] setze wird nur diese Adresse ausgegeben.
 
Zuletzt bearbeitet:
Ich könnte schwören das ich das eben ausprobiert habe und ein Compiler-Fehler kam.
:confused:
Aber irgendwie scheint es nun doch zu klappen. Vielleicht liegt es an anderen Änderungen bzw Fehlern, die ich hatte. So funktionierts auf jeden Fall wieder.
Vielen Dank
 
Zurück