2014-07-26 133 views
1

我试图从精灵中删除精灵,但无济于事,我不知道什么是错的(VS 2010与SFML 2.1)。它根本不会编译。任何提示赞赏。从sfml中删除精灵2.1

它的这条线,这似乎是有问题的:

SpriteVector.erase(std::remove(SpriteVector.begin(), SpriteVector.end(), SpriteIt), SpriteVector.end());

全码:

#include <SFML/Graphics.hpp> 
#include <iostream> 
#include <vector> 
#include <algorithm> 

int main() 
{ 
    sf::RenderWindow mMainWindow(sf::VideoMode(1200, 900), "Map"); 
    mMainWindow.setFramerateLimit(60); 

    sf::RectangleShape rect; 
    rect.setSize(sf::Vector2f(1500, 500)); 
    sf::Texture unittexture; 
    unittexture.loadFromFile("sprite.png"); 

    std::vector<sf::Sprite> SpriteVector; 
    std::vector<sf::Sprite>::iterator SpriteIt; 

    while (mMainWindow.isOpen()) 
    { 
     sf::Event event; 
     while (mMainWindow.pollEvent(event)) 
     { 
      if (event.type == sf::Event::Closed) 
      { 
       mMainWindow.close(); 
      } 
      else if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::A) 
      { 
       sf::Sprite newSprite; 
       newSprite.setTexture(unittexture); 
       newSprite.setPosition(mMainWindow.mapPixelToCoords(sf::Vector2i(sf::Mouse::getPosition(mMainWindow).x-50,sf::Mouse::getPosition(mMainWindow).y-50))); 
       SpriteVector.push_back(newSprite); 
      } 
      else if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Right) 
        { 
        // sf::Vector2f mousecoords(mMainWindow.mapPixelToCoords(sf::Vector2i(event.mouseButton.x, event.mouseButton.y)));  
        // SpriteVector.remove_if([=](sf::Sprite newSprite){return newSprite.getGlobalBounds().contains(mousecoords); });  //example code that would work with a list 

         SpriteVector.erase(std::remove(SpriteVector.begin(), SpriteVector.end(), SpriteIt), SpriteVector.end());   // This doesn't work and I don't know why. 
        } 
     } 
    mMainWindow.clear(); 
    mMainWindow.draw(rect); 

     for(auto &SpriteIt = SpriteVector.begin();SpriteIt != SpriteVector.end();++SpriteIt) 
     { 
      mMainWindow.draw(*SpriteIt); 
     } 
     mMainWindow.display(); 


    } 

    return 0; 
} 

错误日志:

bei Anpassung der Argumentliste '(sf::Sprite, const std::_Vector_iterator<_Myvec>)' 
1>   with 
1>   [ 
1>    _Myvec=std::_Vector_val<sf::Sprite,std::allocator<sf::Sprite>> 
1>   ] 
1>   c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(1829): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "_FwdIt std::_Remove<sf::Sprite*,_Ty>(_FwdIt,_FwdIt,const _Ty &)". 
1>   with 
1>   [ 
1>    _FwdIt=sf::Sprite *, 
1>    _Ty=std::_Vector_iterator<std::_Vector_val<sf::Sprite,std::allocator<sf::Sprite>>> 
1>   ] 
1>   c:\users\bogdan\documents\visual studio 2010\projects\spielkarte bev\sfmltest\main.cpp(40): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "_FwdIt std::remove<std::_Vector_iterator<_Myvec>,std::_Vector_iterator<_Myvec>>(_FwdIt,_FwdIt,const _Ty &)". 
1>   with 
1>   [ 
1>    _FwdIt=std::_Vector_iterator<std::_Vector_val<sf::Sprite,std::allocator<sf::Sprite>>>, 
1>    _Myvec=std::_Vector_val<sf::Sprite,std::allocator<sf::Sprite>>, 
1>    _Ty=std::_Vector_iterator<std::_Vector_val<sf::Sprite,std::allocator<sf::Sprite>>> 
1>   ] 
+0

在发布有关构建错误的问题时,请在问题中包含完整和未编辑的错误日志。请编辑您的问题以包含它们,并且还请指出错误在附录中的位置。 –

+0

错误日志是一种外语,神秘而且相对较长。我真的应该发布吗? – Bronislaw

+0

您可以暂时将语言更改为英语,进行构建以获取错误,然后再更改。 –

回答

1

你传递一个类型,SpriteIt,作为remove而不是价值的最后一个参数你想从容器中取出。