Objet a de type de qualificatifs qui ne sont pas compatibles avec la fonction de membre
Ma classe Game
a un membre EntityManager entityManager_
.
La classe EntityManager
a un membre privé Player player_
et le public de lecture de la fonction Player &EntityManager::getPlayer()
qui renvoie player_
.
La classe Player
a par exemple les fonctions void startMoving()
et sf::Vector2f getPosition() const
.
Maintenant, je peux sans problèmes l'appel entityManager_.getPlayer().startMoving();
de l'intérieur de mon Game
classe, mais quand j'essaie par exemple le code suivant pour obtenir la position du joueur:
sf::Vector2f playerPosition = entityManager_.getPlayer().getPosition();
J'obtiens l'erreur suivante:
IntelliSense:
EntityManager Game::entityManager_
Error: the object has type qualifiers that are not compatible with the member function
object type is: const EntityManager
De sortie:
game.cpp(261): error C2662: 'EntityManager::getPlayer' : cannot convert 'this' pointer from 'const EntityManager' to 'EntityManager &'
Conversion loses qualifiers
J'ai essayé de supprimer les const
de la getPosition fonction, mais rien n'a changé.
Je sais qu'il a probablement quelque chose à voir avec la const
mais je ne peux pas comprendre ce qu'il faut changer! Quelqu'un pourrait-il m'aider?
L'ajout de
const
à getPlayer
supprime l'erreur, mais pourriez-vous me dire ce que je dois retourner au lieu de player_
? Parce que maintenant getPlayer
me dit: erreur: les qualificateurs a chuté de référence de type "Joueur &" pour l'initialiseur de type "const Joueur"Êtes-vous à l'intérieur d'une fonction membre qui est lui-même déclaré
const
?Ah, oui. Cette fonction membre est en effet
const
. Je l'ai enlevé et maintenant ça fonctionne! MerciVous avez besoin
Player &EntityManager::getPlayer() { return _player; }
ET const Player &EntityManager::getPlayer() const { return _player; }
OriginalL'auteur A. D. | 2014-07-10
Vous devez vous connecter pour publier un commentaire.
Le message d'erreur est assez explicite:
Dans le contexte où vous appelez
getPlayer
l'objet de référence estconst
. Vous ne pouvez pas appeler un non-const fonction de membre sur unconst
objet ou par le biais d'unconst
de référence ou un pointeur versconst
.Parce que l'erreur fait référence à
this
, la raison la plus probable est que ce code est à l'intérieur d'une fonction membre qui estconst
.OriginalL'auteur David Rodríguez - dribeas