【发布时间】:2012-11-29 06:12:42
【问题描述】:
这是我正在使用的代码的简化版本:
namespace BasketNovel {
void Engine::BuryEntities()
{
std::list<Entity*>::iterator iter = p_entities.begin();
while (iter != p_entities.end())
{
if ( (*iter)->getAlive() == false )
{
delete (*iter);
iter = p_entities.erase( iter ); //.erase returns next element
}
else iter++;
}
}
}
我收到来自英特尔静态分析的以下警告:
BasketNovel.cpp(567):警告 #12221:在调用“std::_List_iterator”时对对象“iter”进行切片作为实际参数 2 > > std::list >::erase(std::_List_const_iterator > > )" 由于隐式类型转换而发生
我相信这基本上是说我正在导致隐式类型转换:
iter = p_entities.erase(iter);
(注意:即使我将代码更改为:p_entities.erase(iter++);,我也会收到相同的警告)
我不太明白我在上面的“切片”是什么。 这到底是什么意思,我应该如何解决这个警告?我宁愿稍微复杂的代码也不愿完全关闭警告消息。
【问题讨论】:
-
p_entities是如何声明的? -
你用的是什么编译器?
-
@VaughnCato std::list
p_entities; -
是否支持C++11?因为
std::list::erase的签名变了。 -
@juanchopanza 是的,正如你所推断的那样。我已经开启了 C++11 支持。
标签: c++ type-conversion