web-dev-qa-db-ja.com

オブジェクトに、メンバー関数と互換性のない型修飾子があります

私のクラス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と関係があることはわかっていますが、何を変更すればよいかわかりません。誰か助けてくれませんか?

8
A. D.

エラーメッセージは非常に明白です。

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であるメンバー関数内にあることです。