gpt4 book ai didi

c++ - list.begin() 上的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:23:23 25 4
gpt4 key购买 nike

我的 Folder 类中有这个成员函数:

string _recFullPath() {
list<Folder*> folders;
list<Folder*>::iterator it = folders.begin();
folders.push_front(this);
it = folders.begin();
while((*it)->hasParent()) {
folders.push_front((*it)->parent());
it = folders.begin();
}
folders.push_back(this);
for(it = folders.begin(); it != folders.end(); ++it) {
cout << (*it)->getName() << "/";
}
}

这确实可以编译,但是当涉及到它 = folders.begin() 时,在 while 循环中它给出了一个段错误,我不明白为什么。Folder 对象的布局是这样的:

class Folder {
private:
Folder* _parent;
string _name;
string _fullPath;
string _recStrFullPath;
bool _hasParent;

public:
Folder(string name) {
this->_name = name;
this->_hasParent = false;
}

Folder(string name, Folder* parent) {
this->_parent = parent;
this->_name = name;
this->_hasParent = true;
}

Folder* parent() {
return this->_parent;
}

string getName() {
return this->_name;
}

};

当然还有上面提到的功能。有人能看出我在上面的代码中做错了什么吗?

最佳答案

我完全不知道为什么你的 while 循环使用迭代器。这会更干净、更简单:

list<Folder*> folders;
Folder* current = this;

while (current->hasParent()) {
folders.push_front(current);
current = current.parent();
}

folders.push_front(current);

for(list<Folder*>::const_iterator i = folders.begin(); i != folders.end(); ++i) {
cout << (*i)->getName() << "/";
}

关于c++ - list.begin() 上的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3709836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com