2012-03-24 1 views
0

ProjectileManager наследует от EntityManager, который имеет это как защищенный член:оператор вызова() Синтаксис

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() (it). (Вдали от моего компилятора на C++, я комментирую только потому, что на данный момент я не вижу никого другого, чтобы комментировать. Если этот комментарий решает вашу проблему, вы можете опубликовать ответ самостоятельно. Если это не решит его, не обращайте внимания. удача.) Обновление: я вижу, что @SanJacinto теперь ответил. Я думаю, что он прав. – thb

ответ

2

Говорит, что является локальной сетью без ссылок? Отправьте свои строки ошибок, а не ваше приближение строк ошибок.

Что касается вызова нестатической функции-члена, они всегда совпадают. Вам нужна функция-член и объект для привязки.

struct Fred 
{ 
    operator()(){} 
} 

//later on... 

Fred fred; 
fred(); 

Хотя не непосредственно отношение к вашему вопросу, вы можете найти эту ссылку очень полезно для понимания того, как C++ вызывает функцию-членов. http://www.parashift.com/c++-faq-lite/pointers-to-members.html

+0

'it' является локальной линией без ссылок. отредактированный – pighead10