【发布时间】:2022-01-08 12:48:32
【问题描述】:
我在这里遇到了问题,我以为我会在 Internet 上找到一个简单的答案,但已经 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;
};
我对@987654325@ 方法所做的是:
void classA::getListClassB() const {
for(list<classB*>::iterator it = listClassB.begin(); it != listClassB.end; it++){
//Stuff
}
}
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 *> *>>>>"
编辑:
好的,再次感谢您的所有时间,但这个错误让我抓狂。
我完成了一些代码以更明确地说明我的工作。
我没有深入,因为这是法国的大学工作,而且是关于 UML 课程,所以它是与其他课程相关联的课程......
【问题讨论】:
-
试试
(*it)->str -
旁注:
lists 的指针并不是那么有用,除非您存储多态对象。list非常宽容 iterator invalidation rules 所以你不必担心插入和删除会搞砸事情,所以如果你动态分配Whatevers. -
iterator it = myList.begin()是正确的,错误在于您取消引用的方式。试图改变初始化迭代器的方式只会让事情变得更糟。 -
如果您仍然遇到问题,您应该创建一个实际的minimal reproducible example。在您的示例中,类定义的末尾没有
;,也没有使Whatever wtvr("hey");工作的构造函数。如果我纠正这两个问题 和 正确取消引用迭代器,它对我来说很好。 ideone.com/FelLN9 -
您的函数标记为
const,因此您必须使用const_iterator,而不是iterator。否则你就违反了语言规则。您在循环中调用end()时也缺少括号。
标签: c++ list loops class iterator