如何在 C++ 中浏览列表<Class>

0 c++ iterator loops class list

我在这里遇到了一个问题,我以为我可以在互联网上找到一个简单的答案,但已经过了 1 小时了,我无法解决它。看起来很简单,但我找不到方法......

我有2节课:

#include <iostream>
#include <list>
using namespace std;

class classB;

class classA{
private :
    string name;
    list<classB*> listClassB;

public:
    void getListClassB() const;
};

class classB{
private:
    string name;
    list<classA*> listClassA;

public:
    void getListClassA() const;
};
Run Code Online (Sandbox Code Playgroud)

我对该getListClassB()方法所做的是:

void classA::getListClassB() const {
    for(list<classB*>::iterator it = listClassB.begin(); it != listClassB.end; it++){
        //Stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

Visual Studio Code 告诉我有一个错误listClassB来自list<classB*>::iterator it = listClassB.begin()

完整的错误是:

there is no appropriate user-defined conversion of 
"std::_List_const_iterator<std::_List_val<std::conditional_t<true, std::_List_simple_types<classB *>, std::_List_iter_types<classB *, size_t, ptrdiff_t, classB **, classB *const *, classB *&, classB *const &, std::_List_node<classB *, void *> *>>>>\" in \"std::_List_iterator<std::_List_val<std::conditional_t<true, std::_List_simple_types<classB *>, std::_List_iter_types<classB *, size_t, ptrdiff_t, classB **, classB *const *, classB *&, classB *const &, std::_List_node<classB *, void *> *>>>>"
Run Code Online (Sandbox Code Playgroud)

编辑:

好的,再次感谢您的宝贵时间,但这个错误让我发疯。

我完成了一些代码,以便更明确地了解我的工作。

我不深入,因为这是法国的大学作业,而且是关于 UML 课程,所以它是与其他课程相关的课程......

Ser*_*eyA 5

首先,迭代器是一个指针语义对象,因此您必须取消引用它才能访问实际对象。it.str没有意义,因为std::list<>::iterator没有成员(即使有,也与类成员str无关。strWhatever

其次,您的列表元素本身就是指针,因此这意味着您需要第二个间接才能访问该str成员:

std::cout << (*(*it)).str;
Run Code Online (Sandbox Code Playgroud)

更吸引人的语法是:

std::cout << (*it)->str;
Run Code Online (Sandbox Code Playgroud)

  • @NathanPierson 为了让 `-&gt;` 继续取消引用,它应该返回类似指针的对象,而不是实际的指针 - 当它实际找到指针时,它会停止链,并且迭代器的 `operator-&gt;` 返回一个指针。 (2认同)