2012-03-24 57 views
0

ProjectileManager從Ent​​ityManager的繼承,其中有這樣一個受保護的成員:調用operator()語法

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

的ProjectileManager更新功能:

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 
    } 
} 

}

我怎麼會叫EntityDeallocator在it?我試過EntityDeallocator(它),但這說it是一個未引用的局部變量。

+1

你需要在調用它之前實例化一個Entity_Deallocator對象嗎?例如,Entity_Deallocator()(它)。 (遠離我的C++編譯器,我的評論只是因爲我目前沒有其他人可以發表評論,如果這個評論能夠解決你的問題,那麼你可以自己發佈答案,如果它不能解決問題,請不要理會。 )更新:我看到@SanJacinto已經回答了。我認爲他是對的。 – thb 2012-03-24 12:58:49

回答

2

說什麼是未引用的局部變量?發佈你的錯誤字符串,而不是你近似的錯誤字符串。

至於如何調用一個非靜態成員函數,它們總是相同的。你需要一個成員函數和一個綁定它的對象。

struct Fred 
{ 
    operator()(){} 
} 

//later on... 

Fred fred; 
fred(); 

雖然沒有直接相關你的問題,你會發現這個鏈接,瞭解非常有幫助的C++如何調用成員函數。 http://www.parashift.com/c++-faq-lite/pointers-to-members.html

+0

'它'是一個未引用的局部變量。編輯 – pighead10 2012-03-24 13:19:29