私のクラスGame
にはメンバー_EntityManager entityManager_
_があります。
クラスEntityManager
には、プライベートメンバー_Player player_
_と、_player_
_を返すパブリックゲッター関数Player &EntityManager::getPlayer()
があります。
クラスPlayer
には、たとえば関数void startMoving()
およびsf::Vector2f getPosition() const
があります。
これで、Game
クラス内からentityManager_.getPlayer().startMoving();
を問題なく呼び出すことができますが、たとえば次のコードを試してプレーヤーの位置を取得しようとすると、
sf::Vector2f playerPosition = entityManager_.getPlayer().getPosition();
次のエラーが発生します。
IntelliSense:
_EntityManager Game::entityManager_
Error: the object has type qualifiers that are not compatible with the member function
object type is: const EntityManager
_
出力:
_game.cpp(261): error C2662: 'EntityManager::getPlayer' : cannot convert 'this' pointer from 'const EntityManager' to 'EntityManager &'
Conversion loses qualifiers
_
プレーヤーのgetPosition関数からconst
を削除しようとしましたが、何も変わりませんでした。
おそらくconst
と関係があることはわかっていますが、何を変更すればよいかわかりません。誰か助けてくれませんか?
エラーメッセージは非常に明白です。
game.cpp(261): error C2662: 'EntityManager::getPlayer' :
cannot convert 'this' pointer from 'const EntityManager' to
'EntityManager &'
Conversion loses qualifiers
getPlayer
を呼び出しているコンテキストでは、オブジェクト/参照はconst
です。 const
オブジェクトで、またはconst
参照またはconst
へのポインターを介して、非constメンバー関数を呼び出すことはできません。
エラーはthis
を参照しているため、最も可能性の高い理由は、このコードがconst
であるメンバー関数内にあることです。