取消引用指针列表的迭代器
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;
.
我在尝试取消引用 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;
.