23

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

错误 C2663:“sf::Drawable::SetPosition”:2 个重载对“this”指针没有合法转换

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

我怎样才能解决这个问题?

4

1 回答 1

31

Renderconst在参数之后用 a 声明。这意味着它不会改变它的对象。这意味着,对象的所有成员变量都被视为 内的常量Render,因为更改它们的状态意味着更改包含对象。假设Shapes是一个成员变量,并且SetPosition确实改变了形状(即未声明为const),您不能在const成员函数中调用它。

所以,删除constfrom Render,你会没事的(你修复你的逻辑,以防它必须是 const )。

于 2011-07-10T05:10:10.100 回答