c – Const不匹配:2个重载对’this’指针没有合法转换

前端之家收集整理的这篇文章主要介绍了c – Const不匹配:2个重载对’this’指针没有合法转换前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
嘿,我得到这个奇怪的错误

error C2663:
‘sf::Drawable::SetPosition’ : 2
overloads have no legal conversion for
‘this’ pointer

我认为它与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]);}

我怎么可以解决这个问题?

解决方法

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

所以,从Render中删除const,你会很好(你修复你的逻辑,以防它必须是const).

猜你在找的C&C++相关文章