Object具有与成员函数不兼容的类型限定符

A. *_* D. 8 c++ compatibility types const qualifiers

我的班级Game有一名成员EntityManager entityManager_.

该类EntityManager有一个私有成员Player player_Player &EntityManager::getPlayer()返回的公共getter函数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
Run Code Online (Sandbox Code Playgroud)

输出:

game.cpp(261): error C2662: 'EntityManager::getPlayer' : cannot convert 'this' pointer from 'const EntityManager' to 'EntityManager &'
          Conversion loses qualifiers
Run Code Online (Sandbox Code Playgroud)

我尝试const从播放器的getPosition函数中删除但没有改变.

我知道它可能与此有关const但我无法弄清楚要改变什么!有人可以帮帮我吗?

Dav*_*eas 16

错误消息非常明确:

game.cpp(261): error C2662: 'EntityManager::getPlayer' : 
               cannot convert 'this' pointer from 'const EntityManager' to 
                                                  'EntityManager &'
          Conversion loses qualifiers
Run Code Online (Sandbox Code Playgroud)

在您调用getPlayer对象/引用的上下文中const.您不能在const对象上或通过const引用或指针调用非const成员函数const.

因为错误是指this,最可能的原因是此代码在成员函数内部const.