所以我有一个名为song的类,它正常工作,现在我正在尝试创建一个名为SongLibrary的类,它只包含一组歌曲和与之相关的方法。我无法让它发挥作用。
我觉得问题是当我初始化集合时我不太确定要在构造函数中放置什么。
SongLibrary.h
#pragma once
#include <iostream>
#include <string>
#include <ostream>
#include <set>
#include "Song.h"
using std::string;
using std::cout;
using std::endl;
using std::ostream;
using std::istream;
using std::set;
class SongLibrary
{
private:
set<Song> m_songs;
public:
SongLibrary();
#pragma region Getters
set<Song> getSongs();
#pragma endregion
#pragma region Setters
void setSongs(set<Song> songs);
#pragma endregion
#pragma region methods
void displaySongs();
void addSong(Song song);
SongLibrary.cpp
#include "stdafx.h"
#include "SongLibrary.h"
SongLibrary::SongLibrary()
{
m_songs;
}
set<Song> SongLibrary::getSongs()
{
return m_songs;
}
void SongLibrary::setSongs(set<Song> songs)
{
m_songs = songs;
}
void SongLibrary::displaySongs()
{
for (Song song : m_songs)
{
song.display();
}
}
void SongLibrary::addSong(Song song)
{
m_songs.insert(song);
}
在主要中我只是创建一个歌曲实例,然后使用songs.addSong()方法添加一些歌曲对象。然后我尝试显示它们没有显示方法。
我现在得到的错误是 “binary'&lt;':找不到带有'const Song'类型的左手操作数的运算符(或者没有可接受的转换)”
答案 0 :(得分:3)
set<Song>
将使用自己的构造函数将自身初始化为空集,因此SongLibrary
构造函数不必执行任何操作。
您在operator<
看到的问题是,一个集合只存储每个Song
的单个对象。要做到这一点,它必须比较两首歌,看看它们是否相同。因此,它希望Song
类具有比较运算符
bool operator<(const Song& Left, const Song& Right);
比较两首歌曲。
拥有set<Song>
的替代方法可能是将播放列表设为vector<Song>
,并不关心同一首歌是否出现过多次,并且不需要将歌曲放入任何歌曲中特别的顺序。