在我的项目中有一个向量
std::vector<std::shared_ptr<MovingEntity>>gameObjects;
Run Code Online (Sandbox Code Playgroud)
如果元素符合标准,我想删除它们.
删除元素的方法:
void GameWorld::catchBees()
{
auto q = std::remove_if(bees.begin(), bees.end(), beeToClose);
bees.erase(q);
}
Run Code Online (Sandbox Code Playgroud)
方法beeToClose:
bool GameWorld::beeToClose( const MovingEntity & bee)
{
std::shared_ptr<Beekeeper> keeper = std::static_pointer_cast<Beekeeper>(m_beekeeper);
if (bee.getConstPosition().distanceTo(m_beekeeper->getPosition()) > keeper->getCatchDistance())
{
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译代码时,我遇到了一些我试图理解的错误:
'GameWorld :: beeToClose':非标准语法; 使用'&'创建指针
不确定为什么会给出这条消息
'std :: remove_if':找不到匹配的重载函数
我没有声明beeToClose对吗?
'q':在初始化SDLFramework之前无法使用
q未初始化,因为:
std::remove_if(bees.begin(), bees.end(), beeToClose);
Run Code Online (Sandbox Code Playgroud)
运行不对吗?
如何在满足某些条件时正确地从向量中删除std :: shared_ptr?
形成指向成员函数的指针的语法是&ClassName::FunctionName.所以你需要&GameWorld::beeToClose一个指向beeToClose成员函数的指针.在您的情况下,您应该使用lambda来调用该函数
auto q = std::remove_if(bees.begin(), bees.end(),
[&](shared_ptr<MovingEntity> const& bee){ return beeToClose(bee); });
Run Code Online (Sandbox Code Playgroud)
此外,您正在使用错误的vector::erase重载,您希望删除一系列元素,而不是删除单个元素的元素.
bees.erase(q, bees.end());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |