2016-05-06 11 views
-1

Ich habe ein sehr einfaches Problem, aber aufgrund meiner Unerfahrenheit in C++ kann ich nicht scheinen, es zu lösen. Ich habe eine Klasse PlayList, die ein dynamisch zugeordnetes Array als private Daten Mitglied hat. Ich habe noch nie dynamische Arrays verwendet und bin verwirrt darüber, wie man ein bestimmtes Objekt hinzufügt und ein bestimmtes Objekt löscht. Ich komme an einem Song-Objekt vorbei und muss es löschen. Wie würde ich das tun? Mein aktueller Code ist unten (Song ist eine separate Klasse, die ich bin auch nicht)Löschen eines Objekts aus einem dynamisch zugewiesenen Array von Objekten in einer Klasse

#ifndef PROJ5_PLAYLIST_H_INCLUDED 
#define PROJ5_PLAYLIST_H_INCLUDED 
#include "song.h" 
#include <iostream> 

class PlayList{ 

private: 
    Song* playList_arr; 
    int size_of_playlist; 
    int numberOfSongs; 
public: 

    PlayList(); 
    ~PlayList(); 
    void AddSong(const Song& s); 
    bool DeleteSong(const Song& s); 
    void ShowAll() const; 
    void play(int num=1); 
    void ShowStatus()const; 

}; 

#endif // PROJ5_PLAYLIST_H_INCLUDED 

CPP-Datei

#include <iostream> 
#include "proj5_playlist.h" 


PlayList::PlayList() 
{ 
    size_of_playlist = 2; 
    numberOfSongs = 0; 
    playList_arr = new Song[size_of_playlist]; 
} 

PlayList::~PlayList() 
{ 
    delete [] playList_arr; 
} 

void PlayList::AddSong(const Song& s) 
{ 
    if(numberOfSongs==size_of_playlist){ 
     Song* arr=new Song[size_of_playlist+1]; 
     arr[size_of_playlist]=s; 
     for(int i=0;i<size_of_playlist;i++) 
     { 
      arr[i]=playList_arr[i]; 
     } 
     playList_arr=arr; 
     delete arr; 
     arr = NULL; 
    } 
    else{ 
     numberOfSongs++; 
     playList_arr[numberOfSongs-1] = s; 
    } 

} 


void PlayList::DeleteSong(const Song& s) 
{ 


} 
+0

Verwenden Sie einen 'std :: vector '. –

Antwort

0

Verwenden Sie eine Standardbibliothek Objekt (zB Vektor oder LinkedList). Wenn Sie wirklich verwenden, um Ihre dynamische Array wollen, versuchen Sie dies:

void PlayList::DeleteSong(const Song& s) 
{ 
    // First search specified song 
    int index; 
    for (index = 0; index < numberOfSongs; index++) 
    { 
    if (playList_arr[index] == s) // You should implement operator== 
     break; 
    } 

    // Maybe not found 
    if (index == numberOfSongs) 
    { 
    ... 
    return; 
    } 

    // Remove song fron array 
    while (index < (numberOfSongs-1)) 
    { 
    playList_arr[index] = playList_arr[index+1]; 
    index++; 
    } 

    // We got one less song 
    numberOfSongs--; 

} // DeleteSong 
Verwandte Themen