gpt4 book ai didi

c++ - STL 列表迭代器错误

转载 作者:行者123 更新时间:2023-11-30 01:57:18 29 4
gpt4 key购买 nike

我必须使用 STL 为我的数据结构类实现我自己的列表,这里是我的代码。

播放列表.h

#ifndef PLAYLIST_H
#define PLAYLIST_H

#include <iostream>
using std::ostream;

#include <list>
using std::list;

class Song;

class Playlist
{
public:
void append(const char* name, const char* artist);
list<Song>::iterator find(const char* name) const;
void delete_song(const char* name);
void print(ostream& out) const;

private:
list<Song> plist;
};

ostream& operator << (ostream& out, const Playlist& playlist);

#endif /* PLAYLIST_H */


ostream& operator << (ostream& out, const Playlist& playlist);

#endif /* PLAYLIST_H */

播放列表.cpp

#include <iostream>
using std::ostream;
using std::endl;

#include <cstring>

#include "Song.h"
#include "Playlist.h"

void Playlist::append(const char* name, const char* artist)
{
Song song(name, artist);
plist.push_back(song);
}

list<Song>::iterator Playlist::find(const char* name) const
{
list<Song>::iterator itr = plist.begin(); // error occurs here
while(itr != plist.end() && strcmp(itr->get_name(), name) == 0)
{
itr++;
}

return itr;
}

void Playlist::delete_song(const char* name)
{
list<Song>::iterator itr = find(name);
if (itr != plist.end())
plist.erase(itr);
}

void Playlist::print(ostream& out) const
{
list<Song>::iterator itr = plist.begin(); // error occurs here
while (itr != plist.end())
{
out << *itr << endl;
itr++;
}
}

ostream& operator << (ostream& out, const Playlist& playlist)
{
playlist.print(out);
return out;
}

当我尝试编译它时,我得到:

错误:请求从‘std::list::const_iterator {aka std::_List_const_iterator}’到非标量类型‘std::list::iterator {aka std::_List_iterator}’的转换

在代码中标记的两个地方。

最佳答案

方法 void Playlist::print(ostream& out) const 被指定为常量。因此 plist 是 const,所以 plist.begin() 返回一个 const_iterator。您要么必须从方法中删除 const,要么使用 const_cast(最差解决方案),要么简单地使用 const_iterator 迭代列表(最佳选择)。

关于c++ - STL 列表迭代器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18876702/

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