我有std::list
个std::unique_ptrs
到Entity
个对象。当我尝试循环遍历它们时,程序会说列表中的项目是不可访问的。该列表是一个成员变量,声明为private:list< unique_ptr>。
void EntityContainer::E_Update(int delta)
{
for (auto& child : children)
child->Update(delta);
}
Update()
是实体的公共功能。但是,在编译时,我收到以下错误:
c:\ program files(x86)\ microsoft visual studio 11.0 \ _vc \ include \ xmemory0(617):错误C2248:
'std::unique_ptr<_Ty>::unique_ptr'
:无法访问类'std::unique_ptr<_Ty>'
中声明的私有成员
答案 0 :(得分:4)
您正在尝试复制unique_ptr
。它们无法复制,只能被移动。
在第一种情况下,使用参考:
for (auto const & child : children) {
child->Update(delta);
}
在第二种情况下,直接使用dereferenced iterator:
for (auto child = children.begin(); child != children.end(); ++child) {
(*child)->Render();
}
或者,如果您真的想要一个单独的变量,请将其作为参考:
unique_ptr<Entity> const & childPtr = *child;
我知道有一种新形式的基于范围的for
循环的提案,它将通过引用访问这些元素:
for (child : children) {
child->Update(delta);
}
但这还没有正式存在。