2012-03-24 5 views
0

ProjectileManager erbt von EntityManager, die dies als geschützte Mitglied hat:Berufung operator() Syntax

struct EntityDeallocator{ 
    void operator()(std::pair<sf::String,std::shared_ptr<Entity>> p)const{ 
     p.second.reset(); 
     std::cout << "object removed" << std::endl; 
    } 
}; 

Die ProjectileManager Update-Funktion:

void ProjectileManager::update(double frameTime){ 
for(std::map<sf::String,std::shared_ptr<Entity>>::const_iterator it = entities.begin();it!=entities.end();it++){ 
    it->second->update(frameTime); 
    it->second->getObject()->draw(*SfmlFramework::Singleton()->window); 
    if(it->second->getObject()->getSprite()->GetPosition().x > SfmlFramework::Singleton()->window->GetWidth() || it->second->getObject()->getSprite()->GetPosition().y > SfmlFramework::Singleton()->window->GetHeight()){ 
     //I want to call EntityDeallocator on it 
    } 
} 

}

Wie würde ich EntityDeallocator nennen auf it? Ich habe EntityDeallocator (it) versucht, aber das sagt it ist eine nicht referenzierte lokale Variable.

+1

Müssen Sie ein Entity_Deallocator-Objekt instanziieren, bevor Sie es aufrufen? Zum Beispiel Entity_Deallocator() (it). (Entferne mich von meinem C++ - Compiler nur, weil ich sonst niemanden sehen kann, der kommentiert werden kann. Wenn dieser Kommentar dein Problem löst, dann kannst du die Antwort selbst posten. Wenn sie es nicht löst, ignoriere es. Gut Glück.) Update: Ich sehe, dass @SanJacinto jetzt geantwortet hat. Ich denke, dass er recht hat. – thb

Antwort

2

Gibt an, was eine nicht referenzierte lokale Variable ist? Veröffentlichen Sie Ihre Fehlerzeichenfolgen, nicht Ihre Approximation der Fehlerzeichenfolgen.

Zum Aufrufen einer nicht statischen Elementfunktion sind sie immer gleich. Sie benötigen eine Elementfunktion und ein Objekt, an das sie gebunden werden soll.

struct Fred 
{ 
    operator()(){} 
} 

//later on... 

Fred fred; 
fred(); 

nicht direkt relevant für Ihre Frage Obwohl, können Sie diese Verbindung sehr hilfreich für das Verständnis, wie C++ Member-Funktionen aufruft. http://www.parashift.com/c++-faq-lite/pointers-to-members.html

+0

'es' ist eine nicht referenzierte lokale Variable. Bearbeitet – pighead10