取消引用指针列表的迭代器

Dereferencing an iterator of a list of pointers

我在尝试取消引用 std::list<std::unique_ptr<MyClass>> 的迭代器时遇到问题。 这是我的情况:在 headerFile.h 我有

class MyClass{
public:
   bool variable = false;
private:
};

然后在 headerFile2.h

#include "headerFile.h"
#include <memory>
#include <list>
class OtherClass{
public:
private:
   std::list<std::unique_ptr<MyClass>> MyList;
   void MyFuction();
};

最后,在 headerFile2.cpp 中,我尝试这样使用 MyClass::variable:

#include "headerFile2.h"
void OtherClass::MyFunction(){
   for(auto it = MyList.begin(); it != MyList.end(); it++){
      *it -> variable = true;
   }
}

编译不通过,我不知道我的错误在哪里。错误信息是 'struct std::_List_iterator<std::unique_ptr<MyClass> >' has no member named 'variable'

我也试过 **it.variable = true;

如有任何建议,我将不胜感激。

operator->precedence高于operator*,所以*it -> variable = true;被解释为*(it -> variable) = true;,而it -> variable无效。

您可以将括号添加为

(*it) -> variable = true;

**it.variable = true; 有类似的问题;你可以 (**it).variable = true;.