Разыменовывание итератора списка указателей - PullRequest
3 голосов
/ 06 мая 2020

У меня проблема при разыменовании итератора 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: : переменная вроде этой:

#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;.

Буду признателен за любой совет.

1 Ответ

2 голосов
/ 06 мая 2020

operator-> имеет более высокий приоритет , чем operator*, поэтому *it -> variable = true; интерпретируется как *(it -> variable) = true;, а it -> variable недействителен.

Вы можете добавить круглые скобки как

(*it) -> variable = true;

**it.variable = true; имеет аналогичную проблему; вы могли бы (**it).variable = true;.

...