我正在努力学习c ++.没有delSong函数,这段代码编译得很好.但有了它,它将无法编译.我无法弄清楚我做错了什么...: - /
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Jukebox {
public:
void addSong(string artist, string title, string filename) {
songCounter++;
song s {songCounter, artist, title, filename};
Songs.push_back(s);
}
void delSong(int pos) {
Songs.erase(pos);
}
void printSong(int pos) {
cout << Songs[pos].no << ". ";
cout << Songs[pos].artist << " - ";
cout << Songs[pos].title << " : ";
cout << Songs[pos].filename << endl;
}
void printSongs() {
for (int i = 0; i < Songs.size(); i++) {
printSong(i);
}
}
Jukebox(): songCounter(0) {}
private:
int songCounter;
struct song {
int no;
string artist;
string title;
string filename;
};
vector<song> Songs;
};
int main() {
Jukebox jbox;
jbox.addSong("U2", "Magnificent", "U2-Magnificent.mp3");
jbox.addSong("Sting", "Englishman in New York", "Sting-Englishman_in_New_York.mp3");
jbox.addSong("U2", "One", "U2-One.mp3");
jbox.printSongs();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
看看如何erase定义:
http://www.cplusplus.com/reference/stl/vector/erase/
iterator erase ( iterator position );
iterator erase ( iterator first, iterator last );
Run Code Online (Sandbox Code Playgroud)
它将迭代器而不是索引作为参数.而不是
Songs.erase(5);
Run Code Online (Sandbox Code Playgroud)
尝试:
Songs.erase(Songs.begin() + 5);
Run Code Online (Sandbox Code Playgroud)
begin()返回一个迭代器并将其+5移动到要删除的位置.