Maison > développement back-end > C++ > Pourquoi est-ce que j'obtiens des erreurs « passer « const StudentT » comme argument « ceci » » lors de l'accès aux fonctions membres à partir d'un « std :: set » ?

Pourquoi est-ce que j'obtiens des erreurs « passer « const StudentT » comme argument « ceci » » lors de l'accès aux fonctions membres à partir d'un « std :: set » ?

Susan Sarandon
Libérer: 2024-12-26 10:55:14
original
570 Les gens l'ont consulté

Why Do I Get

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 structure des données. Le problème vient de l'inadéquation entre la constance de l'objet et la qualification des fonctions membres.

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;
Copier après la connexion

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
Copier après la connexion

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;
}
Copier après la connexion

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();
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal