我有一个矢量:
std::vector<std::unique_ptr<MyAbstract>> myList;
我想在循环中访问成员“id”并删除特定项目:
for (auto it = myList.begin(); it != myList.end();)
{
if (it->id == 2)
{
it = myList.erase(it);
break;
}
else
++it;
}
这一行...
if (it->id == 2)
给了我一个错误:
'class std :: unique_ptr'没有名为'id'的成员
这似乎有效:
if (it->get()->id == 2)
我想知道为什么?!这是完整的代码: http://ideone.com/kFohfA
答案 0 :(得分:6)
it
是一个迭代器,因此it->
尝试访问存储在向量(std::unique_ptr<MyAbstract>
)中的类型的成员而不是MyAbstract
std::unique_ptr
成立的成员。您需要做的是取消引用迭代器以获取基础std::unique_ptr<MyAbstract>
,然后您可以使用MyAbstract
访问->
的成员
(*it)->id
答案 1 :(得分:2)
*it
的类型为std::unique_ptr<MyAbstract>
,当然没有名为id
的成员。
所以你必须通过get ()
获得&#34;值&#34;:
it->get()->id