Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 唯一向量的迭代器的访问成员_C++_C++11_Stdvector_Unique Ptr - Fatal编程技术网

C++ 唯一向量的迭代器的访问成员

C++ 唯一向量的迭代器的访问成员,c++,c++11,stdvector,unique-ptr,C++,C++11,Stdvector,Unique Ptr,我有一个向量: std::vector<std::unique_ptr<MyAbstract>> myList; 这条线 if (it->id == 2) 给我一个错误: “class std::unique_ptr”没有名为“id”的成员 这似乎有效: if (it->get()->id == 2) 我想知道为什么?!以下是完整的代码: *它具有类型std::unique\u ptr,当然它没有名为id的成员 因此,您必须通过get()获取其“值

我有一个向量:

std::vector<std::unique_ptr<MyAbstract>> myList;
这条线

if (it->id == 2)
给我一个错误:

“class std::unique_ptr”没有名为“id”的成员

这似乎有效:

if (it->get()->id == 2)
我想知道为什么?!以下是完整的代码:
*它具有类型
std::unique\u ptr
,当然它没有名为
id
的成员

因此,您必须通过
get()
获取其“值”:


it
是一个迭代器,因此
it->
尝试访问向量(
std::unique_ptr
)中存储的类型的成员,而不是
MyAbstract
std::unique_ptr
保持不变。您需要做的是取消对迭代器的引用以获得底层的
std::unique\u ptr
,然后您可以使用
->
像这样访问
MyAbstract
的成员

(*it)->id

谢谢,我知道这是因为基础类型,但我认为->会神奇地指向unique_ptr中的MyAbstract,这样我就不必使用get()。@DoubleVoid如果这样做,那么您将无法轻松访问
std::unique_ptr
的成员。
it->get()->id
(*it)->id