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]);}
Как я могу исправить это?
Ответы
Ответ 1
Render
объявляется с помощью const
после параметров. Это означает, что он не изменяет свой объект. Это означает, что все переменные-члены объекта считаются константами внутри Render
, так как изменение их состояния означает изменение содержащего объекта. Предполагая, что Shapes
является переменной-членом и что SetPosition
меняет форму (т.е. Не объявляется как const
), вы не можете вызвать ее в функции члена const
.
Итак, удалите const
из Render
, и все будет в порядке (вы исправите свою логику, если она должна быть const).