Как добавить песню в плейлист с помощью классов

Я пытаюсь исправить мою функцию «addSongtoPlaylist». На данный момент это не работает, я не уверен, что мое утверждение неправильно в функции, но я как бы застрял на этой части прямо сейчас. Эта программа использует графический интерфейс для создания списка воспроизведения из списка песен. Я должен иметь возможность загружать список песен, добавлять, удалять и воспроизводить песни в форме. Любая помощь будет принята с благодарностью за эту функцию.

#include "globals.h"  //some global variables are included here
#include <cstdlib>  //standard c library
#include "mediaItem.h"  //the mediaItem class  (you need to write a class that extends this class)
#include "song.h"#include <iostream>
#include <fstream>
#include <string>
using namespace std;ifstream infile;
song mySong[MAX_SONGS];
int NumberOfSongs;
int myPlaylist[MAX_PLAYLIST];
int PlaylistSize; //counter for size of playlist in array
song *newPlaylist[MAX_PLAYLIST];

bool loadSongList(string filename)
{
infile.open(filename);
string tempArtist, tempTitle, tempLocation;
int i = 0;

if (infile.fail())
{
cout << "The file could not be opened." << endl;
return false;
}
else
{
cout << "File opened successfully." << endl;

infile >> NumberOfSongs;
infile.ignore(1);

while (!infile.eof())
{
getline(infile, tempArtist);
getline(infile, tempTitle);
getline(infile, tempLocation);
mySong[i].setArtist(tempArtist);
mySong[i].setTitle(tempTitle);
mySong[i].setLocation(tempLocation);

i++;
}
infile.close();

return true;
}
}

int getNumberOfSongsInSongList()
{
return NumberOfSongs;
}

string getSongNameFromSongList(int songNum)
{
string tempArtist, tempTitle;

tempArtist = mySong[songNum].getArtist();
tempTitle = mySong[songNum].getTitle();

return tempArtist + " - " + tempTitle;
}

string getSongNameFromPlaylist(int playlistSpot)
{
string tempArtist, tempTitle;

tempArtist = mySong[myPlaylist[playlistSpot]].getArtist();
tempTitle = mySong[myPlaylist[playlistSpot]].getTitle();

return tempArtist + " - " + tempTitle;
}

void addSongToPlaylist(int songNum)
{
mySong[myPlaylist[PlaylistSize]].setArtist(mySong[songNum].getArtist());
mySong[myPlaylist[PlaylistSize]].setTitle(mySong[songNum].getTitle());
mySong[myPlaylist[PlaylistSize]].setLocation(mySong[songNum].getLocation());

mySong[myPlaylist[PlaylistSize]] = mySong[songNum];
newPlaylist[PlaylistSize] = &mySong[songNum];
PlaylistSize++;

}

int getNumberOfSongsInPlaylist()
{
return PlaylistSize;
}

void moveSongDownInPlaylist(int playlistSpot)
{
int temp;
if (playlistSpot >= PlaylistSize - 1)
return;

temp = myPlaylist[playlistSpot + 1];
myPlaylist[playlistSpot + 1] = myPlaylist[playlistSpot];
myPlaylist[playlistSpot] = temp;
}

void removeSongFromPlaylist(int playlistSpot)
{
for (int i = playlistSpot; i < PlaylistSize; i++)
moveSongDownInPlaylist(i);

myPlaylist[PlaylistSize - 1] = 0;
PlaylistSize--;
}

void clearPlaylist()
{
for (int i = 0; i < PlaylistSize; i++)
myPlaylist[i] = 0;

PlaylistSize = 0;
}

void moveSongUpInPlaylist(int playlistSpot)
{
int temp;

if (playlistSpot == 0)
return;

temp = myPlaylist[playlistSpot - 1];
myPlaylist[playlistSpot - 1] = myPlaylist[playlistSpot];
myPlaylist[playlistSpot] = temp;
}

void playSongFromPlaylist(int playlistSpot)
{
mySong[myPlaylist[playlistSpot]].playMedia();
}

void pauseSongFromPlaylist(int playlistSpot)
{
mySong[myPlaylist[playlistSpot]].pauseMedia();
}

void stopSongFromPlaylist(int playlistSpot)
{
mySong[myPlaylist[playlistSpot]].stopMedia();
}

1

Решение

Я подозреваю, что ваш addSongToPlaylist функцию просто нужно добавить songNum до конца myPLaylist,

Это также выглядит как myPlaylist должен быть просто массив int не int *, Примечание. В данный момент вы выделяете массив указателей, но не выделяете память для указателей.

каждый int в списке будет номер песни, ссылающийся на существующую запись в mySong,

Моя рекомендация:

  • + Изменить myPlayList для int массив и исправить весь код, который разыменовывает его ( * что везде).
  • + Изменить addSongToPLaylist просто добавить номер песни в конец массива, который обозначается как (смешанно названный) PlayListSize,

Если после этого у вас возникнут проблемы, пожалуйста, спросите.

Редактировать:
Как myPlaylist должно быть song *myPlaylist[MAX_SONGS]Вы можете сделать то же самое, что и выше, но вместо добавления номера песни в конец списка, вы бы добавили указатель на песню в mySong массив. Что-то вроде:

void addSongToPlaylist(int songNum)
{
// TODO: Check PlaylistSize is less than MAX_PLAYLIST
myPlaylist[PlaylistSize] = &mySong[songNum];
PlaylistSize++;
}
2

Другие решения


По вопросам рекламы [email protected]