Pour les débutants, c'est un devoir, j'ai une bonne compréhension de ce que je suis censé faire mais il me manque évidemment quelque chose. J'ai actuellement une classe de base abstraite appelée "Person". Et j'ai 3 classes qui héritent la personne elles sont le personnel, la faculté, et l'étudiant. J'essaie d'organiser tous les noms de «personne» par nom de famille. Je dois donc surcharger l'opérateur '<'.C++ - Chaînes d'alphabétisation - '<' Surcharge d'opérateur
J'ai la fonction écrite mais je ne sais pas où la mettre.
Fonction:
bool operator < (const Faculty &right)
{
if(getLastName() >= right.getLastName() == 0)
return true;
return false;
}
Dois-je mettre cela dans le fichier d'en-tête pour toutes mes classes dérivées, ou devrais-je le mettre en fonction virtuelle dans la personne de classe de base? Ou devrais-je faire les deux. Actuellement, je fais les deux et je reçois une erreur pour chaque fichier.
erreur:
error C2662: 'Person::getLastName' : cannot convert 'this' pointer from
Mise à jour: J'ai changé ma fonction:
bool operator < (const Person &right)
{
return LastName >= right.getLastName();
}
Après avoir obtenu des conseils d'autres personnes, je n'ai placé cette fonction dans « Personne "et l'a rendu non virtuel. Pourtant, je reçois toujours 5 des mêmes erreurs exactes qui pointent toutes vers cette fonction.
Erreur:
'Person::getLastName' : cannot convert 'this' pointer from 'const Person' to 'Person &'
Si elle aide qui que ce soit ici le code à mon "Person.h":
class Person
{
private:
string FirstName,
LastName,
MiddleName,
SSN;
string FullName;
public:
Person();
Person(string, string, string, string);
Person(string);
string getFirstName();
string getLastName();
string getMiddleName();
string getSSN();
string getFullName();
void setFirstName(string);
void setLastName(string);
void setMiddleName(string);
void setSSN(string);
void setFullName(string);
virtual string getIdentity()
{
return FirstName + " " + MiddleName + " " + LastName + " " + SSN;
}
bool operator < (const Person &right)
{
return LastName >= right.getLastName();
}
virtual string getPurpose() = 0;
};
Votre sortie d'erreur est coupée. S'il vous plaît poster l'intégralité du message d'erreur. – robert
L'erreur n'est pas vraiment liée à votre question: http://msdn.microsoft.com/en-us/library/2s2d2tez%28VS.80%29.aspx 'getLastName' devrait être une fonction membre' const'. (Je suppose que 'getLastName' est non-const sur la base que votre' operator <'est non-const). –
@Steve Jessop: vous ne savez pas que l'erreur se rapporte à 'const'-ness, car vous ne pouvez pas voir l'erreur. Votre lien suggère simplement que le problème peut se rapporter à 'const'-ness. – robert