常量不匹配:2 个重载对'this'指针没有合法转换

Const mismatches: 2 overloads have no legal conversion for 'this' pointer

本文关键字:指针 转换 this 不匹配 重载 常量      更新时间:2023-10-16

我得到这个奇怪的错误:

错误C2663:'sf::Drawable::SetPosition': 2重载没有合法的转换"这"指针

我认为这与const不匹配有关,但我不知道在哪里,也不知道为什么。在下面的代码中,我有一个形状和精灵的矢量,当我试图访问其中一个矢量形状并调用它的一个函数时,我得到了错误。

std::vector<sf::Shape> Shapes;
std::vector<sf::Sprite> Sprites;
bool AddShape(sf::Shape& S){
    Shapes.push_back(S); return true;
};
bool AddSprite(sf::Sprite& S){
    Sprites.push_back(S); return true;
};
private:
virtual void Render(sf::RenderTarget& target) const {                
    for(unsigned short I; I<Shapes.size(); I++){
        Shapes[I].SetPosition(
            Shapes[I].GetPosition().x + GetPosition().x,
            Shapes[I].GetPosition().y + GetPosition().y);
        target.Draw(Shapes[I]);
    }
    for(unsigned short I; I<Sprites.size(); I++){
        target.Draw(Sprites[I]);
    }
}

我怎么能解决这个问题?

Render在参数后面声明一个const。这意味着它不会改变它的对象。这意味着,所有对象的成员变量都被认为是Render中的常量,因为改变它们的状态意味着改变包含对象。假设Shapes是一个成员变量,并且SetPosition没有改变形状(即没有声明为const),你不能在const成员函数中调用它。

因此,从Render中删除const,您将会很好(您修复了您的逻辑,以防它必须是const)。