8
votes

L'objet a des qualificateurs de type qui empêche la correspondance (surcharge de fonction non trouvée)

J'ai une classe simple, destiné à convertir des entiers en articles d'octets.

mc_int& mc_int::operator=(const mc_int& other) {
            val = other.value();  
            //    |-------->Error: No instance of overloaded function matches the argument list and object (object has type quelifiers that prevent the match)
}


0 commentaires

3 Réponses :


16
votes

Votre fonction membre valeur () n'est pas une fonction const , ce qui signifie qu'il a le droit de modifier les membres et ne peut pas être appelé sur const < / code> objets. Puisque je suppose que vous vouliez dire que cela ne doit être lu que, changez-le à Int Value () const; . Ensuite, vous pouvez l'appeler sur const de MC_INT , et il garantit que vous ne modifiez pas accidentellement aucun membre.

Quand il est indiqué que "l'objet a des qualificateurs de type bla bla", cela signifie qu'un objet a trop de const ou volatile qualificatifs pour accéder à une fonction.

En outre, puisque vous avez posté un résumé d'une erreur, je suppose que vous utilisez Visual Studio. Visual Studio montre des résumés d'erreurs dans la fenêtre "Erreur". Allez à Affichage-> Sortie Pour voir les erreurs complètes dans leurs détails terribles, qui auraient dû vous dire quelle variable était le problème et qu'elle ne pouvait pas appeler cette fonction à cause de son const ness. < / p>


0 commentaires

3
votes

Essayez de changer: xxx

à: xxx


0 commentaires

3
votes

dans cet opérateur surchargé = , autre est une référence const . Vous ne pouvez appeler que des fonctions membres marquées const sur cet objet. Depuis la valeur VALUE () Retourne, renvoie Val et ne modifie pas l'objet, il doit être marqué comme const : xxx < / Pré>

Ceci dit que cette fonction ne modifiera pas l'état de l'objet et peut donc être appelé sur les objets const .


1 commentaires

Oh, je ne pense pas que je ne découvrirais jamais cela, merci d'avoir expliqué.