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

问题描述 投票:0回答:2

我的班级

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

输出:

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

我尝试从玩家的 getPosition 函数中删除

const
但没有任何改变。

我知道这可能与

const
有关,但我不知道要改变什么!有人可以帮我吗?

c++ types constants compatibility qualifiers
2个回答
21
投票

错误信息非常明确:

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

在您调用

getPlayer
的上下文中,对象/引用是
const
。您不能在
const
对象上或通过
const
引用或指向
const
的指针调用非常量成员函数。

因为错误指的是

this
,最有可能的原因是该代码位于
const
的成员函数内。


0
投票

并不直接适用于OP的问题,但我在尝试从标记为const的方法内部推送到向量类成员时遇到了相同消息的错误。向量类型和我传递给它的数据都没有修改 const,这让我感到非常困惑。从函数中删除

const
修饰符解决了我的问题。 (例如
int MyClass::myFunc() const
->
int MyClass::myFunc()

© www.soinside.com 2019 - 2024. All rights reserved.