2013-07-19 2 views
0

Dans ma classe de cadre que j'ai ce vecteur a déclaré: std::vector<sf::Drawable*> drawableStack;vecteur pointant vers vecteur de pointeurs

Lorsque le drawableStack est tout rempli, je veux dessiner tous les objets dans une boucle comme celle-ci:

void Framework::drawScreen() 
{ 
    window->clear(); 

    std::vector<sf::Drawable*>::iterator itr; 

    for(itr=drawableStack.begin(); itr!=drawableStack.end(); itr++) 
    { 
     window->draw(itr); 
    } 

    window->display(); 
} 

La fenêtre est déclarée dans l'en-tête sf::RenderWindow* window; et la fonction de dessin est sf::RenderWindow::draw(const sf::Drawable&) et l'erreur est error: no matching function for call to 'sf::RenderWindow::draw(std::vector<sf::Drawable*>::iterator&'. Qu'est-ce que?

Répondre

1

Vous avez oublié de déréférencer l'itérateur. Modifiez cette ligne:

window->draw(itr); 

à

window->draw(**itr); 

Vous devez déréférencer deux fois. Une fois pour aller de l'itérateur au sf::Drawable* il pointe vers, et une deuxième fois parce que le vecteur contient des pointeurs et la fonction prend une référence comme argument.

+0

Merci d'expliquer pourquoi la solution fonctionne aussi bien que ce qui était faux! –

0

Vous devez déréférencer à la fois l'itérateur et le pointeur:

window->draw(**itr); 
Questions connexes