Const不匹配:2个重载没有'this'指针的合法转换

时间:2011-07-10 04:55:34

标签: c++ vector const this-pointer

我遇到了这个奇怪的错误:

  

错误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]);
    }
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:23)

Render在参数后面以const声明。这意味着它不会改变它的对象。这意味着,所有对象的成员变量都被视为Render中的常量,因为更改其状态意味着更改包含对象。假设Shapes是成员变量,并且SetPosition确实更改了形状(即未声明为const),则无法在const成员函数中调用它。

所以,从const中移除Render,你会没事的(如果必须是const,你可以修复你的逻辑)。