J'ai un vecteur d'objets d'étudiants que je veux trier en utilisant #include <algorithm>
et sort(list.begin(), list.end());
problème de surcharge l'opérateur <en C++
Pour ce faire, je comprends que je dois surcharger l'opérateur « < » mais après essayer (et échouer) avec plusieurs méthodes suggérées en ligne, je suis à court d'idées.
Voici ma dernière tentative:
En Student.h ...
...
using namespace std;
class Student
{
friend bool operator <(const Student& first, const Student& second);
public:
...
private:
...
};
Et Student.cpp ...
...
#include "Student.h"
using namespace std;
...
bool operator <(const Student& first, const Student& second)
{
return first.Name() < second.Name();
}
où "Nom()" est une fonction constante qui renvoie une chaîne.
Le programme compile et fonctionne, mais ma fonction de l'opérateur est jamais appelé pendant le tri et quand j'essayé comparer deux objets étudiants comme s1 < s2
je me suis une « erreur: opérateur surchargé introuvable »
Comment puis-je surcharge correctement cet opérateur afin que mon genre fonctionne comme je l'ai l'intention?
Je pense que j'ai finalement décidé que c'était la réponse que je choisirais, parce que c'est celle qui m'a le plus directement amené à identifier le plus gros problème que j'avais avec mes pointeurs. –
Cette approche est souvent évitée car si les types sont convertibles en Student, le code convertit le type de droite mais pas le type de gauche. Une fonction d'ami se comporterait de manière cohérente pour les deux parties. –