Alors, j'ai une struct Bike
, qui ressemble à ceEn utilisant ostream surcharge sur des pointeurs vers des objets
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';
}
Et une autre classe BikeRentalService
, qui a un std::vector<Bike*>
appelé bikes_m
. Cette classe a également une méthode print_available_bikes()
, qui est censée parcourir sur ladite std::vector<Bike*>
et imprimer chaque Bike
en utilisant le operator<<
surchargé montré ci-dessus. Cette méthode ressemble que:
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;
}
}
}
}
Le problème est que l'utilisation de cette fonction se contente d'afficher les adresses de ces Bike
objets. Le déréférencement des objets avant l'utilisation de out <<
ne fonctionne pas non plus, Visual Studio indique qu'il ne peut pas référencer std::basic_ostream
car il s'agit d'une "fonction supprimée". L'écriture de la boucle for comme (auto *bike : bikes_m)
ne change rien.
D'après votre description, il n'est pas clair pour moi si vous avez essayé «out» * bike; – KyleKnoepfel
Votre 'operator <<' doit prendre 'out' par référence. Ensuite, utilisez 'out << * vélo;'. (Bien que je ne vois pas le point d'utiliser un 'std :: vector' en premier lieu.) –
Quoi d'autre devrais-je utiliser? – blubbi