2011-07-10 6 views
11

Hey estoy recibiendo este extraño error:desajustes Const: 2 sobrecargas tienen ninguna conversión legal para este puntero

error C2663: 'sf::Drawable::SetPosition' : 2 overloads have no legal conversion for 'this' pointer

Creo que tiene algo que ver con los desajustes const pero yo no sé dónde , o por qué. En el siguiente código tengo un vector de formas y sprites, y cuando intento acceder a una de las formas de vectores y llamar a una de sus funciones, obtengo el error.

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

¿Cómo puedo solucionar esto?

+0

¿En qué línea sucede? –

+0

¿Por qué esta pregunta tiene tan buen puntaje? Lo sentimos, no hay intención de ofender, pero ¿no es obvio? – Liviu

Respuesta

14

Render se declara con un const después de los parámetros. Esto significa que no cambia su objeto. Lo que significa que todas las variables miembro del objeto se consideran constantes dentro de Render, ya que cambiar su estado significa cambiar el objeto que lo contiene. Suponiendo que Shapes es una variable miembro, y que SetPosition cambia la forma (es decir, no declarado como const), no puede llamarlo dentro de una función de miembro const.

Por lo tanto, elimine el const de Render y estará bien (arregle su lógica, en caso de que deba ser const).

+0

No puede eliminar la const; él está derivando de una clase base que presumiblemente puso esa const allí para comenzar. –

+0

@Nicol Bolas, ¿cómo lo sabes? El OP no dice nada sobre la clase que contiene 'Render', ¿verdad? Y si lo hace y me lo perdí, tendrá que cambiar el contenido de 'Render'. No puede cambiar las variables de miembro dentro de una función de miembro 'const' (a menos que quiera hackear su propio código y sorprender a sus usuarios). – eran

+0

Leí su última publicación; él está haciendo un SFable dibujable. –

Cuestiones relacionadas