64 votes

une fonction non membre ne peut pas avoir de qualificatif cv

En écrivant la fonction suivante abs j'obtiens l'erreur :

fonction de non-membre unsigned int abs(const T&) ne peut pas avoir de cv-qualifier.

template<typename T>
inline unsigned int abs(const T& t) const
{
    return t>0?t:-t;
}

Après avoir retiré le const pour la fonction, il n'y a pas d'erreur. Puisque je ne modifie pas t à l'intérieur de la fonction, le code ci-dessus aurait dû être compilé. Je me demande pourquoi j'ai eu cette erreur ?

126voto

Attila Points 18290

Votre volonté de ne pas modifier t est exprimée en const T& t . La fin const spécifie que vous ne modifierez aucune variable membre de la classe abs appartient à.

Comme il n'y a pas de classe à laquelle cette fonction appartient, vous obtenez une erreur.

33voto

Bo Persson Points 42821

El const à la fin de la déclaration de la fonction s'applique à la fonction cachée this pour les fonctions membres.

Étant donné qu'il s'agit d'une fonction libre, il n'y a pas d'obligation d'achat. this et ce modificateur n'est pas nécessaire.

El t a déjà son propre paramètre const dans la liste des paramètres.

13voto

ecatmur Points 64173

Le qualificateur cv d'une fonction membre spécifie que la fonction this le pointeur doit avoir un type indirect const (ou volatile , const volatile ) et que, par conséquent, la fonction membre peut être appelée sur des instances ayant cette qualification.

Les fonctions libres (et les fonctions statiques de classe) n'ont pas d'objet this pointeur.

0 votes

Upvote simplement parce que vous avez expliqué cv ce qui est ce que je cherchais.

3voto

Xiaofeng.Wang Points 31

Comme nous le savons tous, const suivi de la liste des arguments indique qu'il s'agit d'un pointeur vers une constante pointeur.

Il y a une fonction non membre, elle n'appartient pas à la classe, donc l'erreur add const opposite end se produit.

Solution au problème : est soit de devenir une fonction membre de la classe, soit de supprimer la fonction const mot-clé constant extrémité opposée

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X