不断增加的指针数组 错误:赋值中的类型不兼容



我正在做一个作业,我有这个错误,这对我来说毫无意义。基本上我们有"播放列表"类,它有一个指向"跟踪"的指针数组

class Playlist{
private:
    string playlistName;
    int trackCount;
    Track*  tracks[0];
public:
    Playlist(string name);
    Track* GetTrack(int index);
    int GetTrackCount();
    void AddTrack(Track* track, int index);
    void AddTrack(Track* track);
    void RemoveTrack(int index);
    void RemoveTrack(Track* track);
};

错误发生在函数 AddTrack(Track t,int i) 和 RemoveTrack(int i)

    Playlist.cpp: In member function ‘void Playlist::AddTrack(Track*, int)’:
Playlist.cpp:27:11: error: incompatible types in assignment of ‘Track* [(((Playlist*)this)->Playlist::trackCount + 1)]’ to ‘Track* [1]’
     tracks= newtracks;
           ^
Playlist.cpp: In member function ‘void Playlist::RemoveTrack(int)’:
Playlist.cpp:42:12: error: incompatible types in assignment of ‘Track* [(((Playlist*)this)->Playlist::trackCount + -1)]’ to ‘Track* [1]’
     tracks = newtracks;
            ^
student@ldnel:~/Documents/A2$ g++ -std=c++14 *.cpp
Playlist.cpp: In member function ‘void Playlist::AddTrack(Track*, int)’:
Playlist.cpp:28:11: error: incompatible types in assignment of ‘Track* [newSize]’ to ‘Track* [1]’
     tracks= newtracks;
           ^
Playlist.cpp: In member function ‘void Playlist::RemoveTrack(int)’:
Playlist.cpp:44:12: error: incompatible types in assignment of ‘Track* [newSize]’ to ‘Track* [1]’
     tracks = newtracks;
            ^

这是我的函数实现:

Playlist::Playlist(string name){
    playlistName=name;
}
Track* Playlist::GetTrack(int index){
    return tracks[index];
}
int Playlist::GetTrackCount(){
    return trackCount;
}
void Playlist::AddTrack(Track* track, int index){
    int newSize = trackCount+1;
    Track  *newtracks[newSize];
    for(int i=0;i<newSize;i++){
        if(i<index){
            newtracks[i] = tracks[i];
        }else if(i==index){
            newtracks[i]=track;
        }else{
            newtracks[i]=tracks[i-1];
        }
    }
    tracks= newtracks;
    trackCount++;
}
void Playlist::AddTrack(Track* track){
    AddTrack(track,trackCount);
}
void Playlist::RemoveTrack(int index){
    int newSize = trackCount-1;
    Track *newtracks[newSize];
    for(int i=0;i<newSize;i++){
        if(i<index){
            newtracks[i]=tracks[i];
        }else{
            newtracks[i]=tracks[i+1];
        }
    }
    tracks = newtracks;
    trackCount--;
}
void Playlist::RemoveTrack(Track* track){
    for(int i=0;i<trackCount;i++){
        if(tracks[i]==track){
            RemoveTrack(i);
            return;
        }
    }
}

我计划做的是拥有一个动态存储所有曲目和播放列表的数据管理器类,该类将引用它包含的曲目。我不知道为什么它考虑两个不同类型的数组

您正在尝试将长度为 x 的数组分配给不同大小的数组。我建议你使用 std::vector(http://en.cppreference.com/w/cpp/container/vector) 而不是数组。

您可能还需要考虑使用 std::shared 指针 (http://en.cppreference.com/w/cpp/memory/shared_ptr)。

您可能还需要查看 AddTrack(Track * track, int index) 函数的迭代器 (http://en.cppreference.com/w/cpp/iterator/iterator)。

我会像这样实现它:

class Playlist {
private:
    std::string playlistName;
    int trackCount;
    std::vector<std::shared_ptr<Track>> tracks;
public:
    Playlist(std::string name);
    std::shared_ptr<Track> GetTrack(int index);
    int GetTrackCount();
    void AddTrack(std::shared_ptr<Track> track, int index);
    void AddTrack(std::shared_ptr<Track> track);
    void RemoveTrack(int index);
    void RemoveTrack(std::shared_ptr<Track> track);
};

这将是我的添加函数:

void Playlist::AddTrack(std::shared_ptr<Track> track, int index) {
    std::vector<std::shared_ptr<Track>>::iterator itor = tracks.begin();
    itor += index;
    tracks.insert(itor, track);
}
void Playlist::AddTrack(std::shared_ptr<Track> track) {
    tracks.push_back(track);
}

我相信您可以自己实施其余部分。 :)

最新更新