Я должен реализовать свой собственный список с stl для моего класса структур данных, вот код, который у меня есть.Stl List Iterator Error
Playlist.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 */
Playlist.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;
}
Когда я пытаюсь скомпилировать это я получаю:
ошибки: преобразование из «станд :: Список :: const_iterator { aka std :: _ List_const_iterator} 'для нескалярного типа' std :: list :: iterator {aka std :: _ List_iterator} 'запрошен
в обоих местах, отмеченных в коде.
после удаления const из метода, который он скомпилировал. благодаря – user2325753