Erreur lors de la transmission de fonctions membres non const aux objets Const
Dans le code fourni, un std::set est utilisé pour stocker StudentT objets. Le problème survient lors de la tentative d’appel des fonctions membres getId() et getName() sur des objets de l’ensemble. Ces fonctions membres ne sont pas marquées comme const, ce qui signifie qu'elles peuvent modifier les données de l'objet. Cependant, les objets dans std::set sont stockés sous const StudentT, empêchant toute modification.
Le compilateur détecte cette incohérence et génère les messages d'erreur suivants :
../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
Cette erreur indique que le compilateur tente de transmettre un objet const comme argument this aux fonctions membres non const, ce qui est interdit.
Solution :
Pour résoudre ce problème, modifiez les fonctions membres getId() et getName() pour qu'elles soient const comme suit :
int getId() const { return id; } string getName() const { return name; }
En marquant ces fonctions comme const, vous vous assurez qu'elles ne modifieront pas les données de l'objet et qu'elles pourront être appelées en toute sécurité sur const objets.
De plus, il est également recommandé de créer le < fonction de comparaison d'opérateur const en passant des références const à ses paramètres :
inline bool operator< (const StudentT &s1, const StudentT &s2) { return s1.getId() < s2.getId(); }
Ces modifications éviteront les erreurs inattendues et garantiront que le code fonctionne correctement.
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!