Überlastung, habe ich eine Struktur Bike
, die wie dieseMit Ostream So auf Zeiger auf Objekte
struct Bike {
std::string brand;
std::string model;
bool is_reserved;
friend std::ostream& operator<<(std::ostream out, const Bike& b);
};
std::ostream& operator<<(std::ostream out, const Bike& b) {
return out
<< "| Brand: " << b.brand << '\n'
<< "| Model: " << b.model << '\n';
}
Und eine andere Klasse BikeRentalService
, die ein std::vector<Bike*>
bikes_m
genannt hat aussieht. Diese Klasse hat auch eine Methode print_available_bikes()
, die über diese std::vector<Bike*>
iterieren und jede Bike
mit dem überladenen operator<<
drucken soll, das oben gezeigt wird. Diese Methode sieht wie folgt aus:
void BikeRentalService::print_available_bikes(std::ostream& out) {
if (bikes_m.empty()) {
out << "| None" << '\n';
}
else {
for (auto bike : bikes_m) {
if (!bike->is_reserved) {
out << bike;
}
}
}
}
Das Problem ist, dass diese Funktion nur die Adressen jener Bike
Objekte ausdruckt werden. Das Dereferenzieren der Objekte vor der Verwendung von out <<
funktioniert ebenfalls nicht. Visual Studio sagt, dass es nicht auf std::basic_ostream
verweisen kann, da es sich um eine "gelöschte Funktion" handelt. Das Schreiben der for-Schleife als (auto *bike : bikes_m)
ändert nichts.
Aus Ihrer Beschreibung ist es mir nicht klar, wenn Sie 'out << * bike;' ausprobiert haben. – KyleKnoepfel
Ihr 'Operator <<' muss durch Referenz "out". Dann benutze 'out << * bike;'. (Obwohl ich nicht den Punkt der Verwendung eines 'std :: vector' an erster Stelle sehe.) –
Was sollte ich noch verwenden? – blubbi