Qualification de fonction incohérente dans l'invocation de fonction membre
Dans le code fourni, l'erreur se produit lors de l'accès aux fonctions membres getId() et getName() à partir d'objets stockés dans l'ensemble
Pour comprendre cela, nous devons nous rappeler que les objets d'un ensemble sont stockés sous forme de références const. Cependant, les fonctions membres getId et getName ne sont pas déclarées comme const, ce qui implique qu'elles peuvent modifier l'état de l'objet.
Dans la ligne où l'erreur se produit :
cout << itr->getId() << " " << itr->getName() << endl;
le Le compilateur détecte que l'itérateur itr pointe vers un objet const StudentT, qui par définition ne peut pas être modifié. Par conséquent, tenter d'appeler des fonctions non membres const sur un objet const n'est pas autorisé, d'où les messages d'erreur générés :
../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'int StudentT::getId()' discards qualifiers ../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'std::string StudentT::getName()' discards qualifiers
Pour résoudre ce problème, nous devons déclarer les fonctions membres getId et getName comme const, indiquant qu'elles ne modifient pas l'état de l'objet :
int getId() const { return id; } string getName() const { return name; }
En rendant ces fonctions const, nous garantissons qu'elles peuvent être invoquées en toute sécurité sur les objets const, éliminant ainsi erreur de non-concordance de constance.
De plus, l'opérateur< la surcharge de la classe StudentT doit également être déclarée comme const :
inline bool operator<(const StudentT &s1, const StudentT &s2) { return s1.getId() < s2.getId(); }
Cela garantit que l'opération de comparaison ne tente pas de modifier les objets comparés, en maintenant l'exactitude du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!