Подтвердить что ты не робот

Const mismatches: 2 перегрузки не имеют юридического преобразования для указателя 'this'

Эй, я получаю эту странную ошибку:

ошибка C2663: 'sf:: Drawable:: SetPosition': 2 перегрузки не имеют юридического преобразования для 'this' указатель

Я думаю, что это имеет какое-то отношение к состязаниям, но я не знаю, где и почему. В следующем коде у меня есть вектор фигур и спрайтов, и, пытаясь получить доступ к одной из форм векторов и вызывая одну из своих функций, я получаю ошибку.

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

Как я могу исправить это?

4b9b3361

Ответ 1

Render объявляется с помощью const после параметров. Это означает, что он не изменяет свой объект. Это означает, что все переменные-члены объекта считаются константами внутри Render, так как изменение их состояния означает изменение содержащего объекта. Предполагая, что Shapes является переменной-членом и что SetPosition меняет форму (т.е. Не объявляется как const), вы не можете вызвать ее в функции члена const.

Итак, удалите const из Render, и все будет в порядке (вы исправите свою логику, если она должна быть const).