12

私のクラスGameにはメンバーがいEntityManager entityManager_ます。

このクラスEntityManagerには、プライベート メンバーと、を返すPlayer player_パブリック ゲッター関数があります。Player &EntityManager::getPlayer()player_

クラスPlayerには、たとえば関数void startMoving()sf::Vector2f getPosition() const.

entityManager_.getPlayer().startMoving();これで、クラス内から問題なく呼び出すことができますGameが、たとえば次のコードを試してプレーヤーの位置を取得しようとすると:

sf::Vector2f playerPosition = entityManager_.getPlayer().getPosition();

次のエラーが表示されます。

インテリセンス:

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

constプレーヤーの getPosition 関数からを削除しようとしましたが、何も変わりませんでした。

おそらく何か関係があることは知っていますが、const何を変更すればよいかわかりません! 誰か助けてくれませんか?

4

1 に答える 1

20

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

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

于 2014-07-10T13:00:16.173 に答える