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

时间:2014-07-10 12:49:57

标签: c++ types const compatibility qualifiers

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

班级EntityManager有一个私人会员Player player_和公共getter函数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

我尝试从播放器的getPosition函数中删除const,但没有任何更改。

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

1 个答案:

答案 0 :(得分:16)

错误消息非常明确:

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的成员函数内。