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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...