将对象推送到矢量时没有输出

No output when object is pushed to vector

本文关键字:输出 对象      更新时间:2023-10-16

我的模型非常简单,但我使用的向量遇到了一些问题。

基本上,我有一个具有一个播放列表的 Song 类,并且播放列表可以有多个轨道(在向量内)。

Song* song = new Song("Rien de rien", "Biggy", 120);
Playlist* playlist;
Track* synthTrack;
playlist->addTrack(synthTrack); // without this line everything works fine
song->setPlaylist(playlist);
cout << "Title " + song->getTitle() << endl;

控制台没有给我任何错误,但cout没有显示。一旦我将曲目添加到播放列表,就会发生这种情况。

这是我的播放列表类的样子:

class Playlist {
private:
    vector<Track*> tracklist;
public:
    void addTrack(Track* track){
        this->tracklist.push_back(track);
    }
};

您正在通过访问无效指针来调用未定义的行为,这意味着任何事情都可能发生:

Playlist* playlist;
Track* synthTrack;
playlist->addTrack(synthTrack); // using uninitialized pointer

应该是

Playlist* playlist = new Playlist; //initialize playlist here
Track* synthTrack = new Track; //also initialize synthTrack
playlist->addTrack(synthTrack);

@Lucian已经给出了解决您所看到的问题的合理开端,但我主张采用一种不同的路线。我首先删除相关代码中的所有指针:

Song song("Rien de rien", "Biggy", 120);
Playlist playlist;
Track synthTrack;
playlist.addTrack(synthTrack);
song.setPlaylist(playlist);
cout << "Title " << song.getTitle() << "n";

。和:

class Playlist {   
    vector<Track> tracklist;    
public:
    void addTrack(Track const &track){
        tracklist.push_back(track);
    }
};
一开始需要指针

是相当不寻常的,当你确实需要它们时,你几乎肯定希望将它们包装在某种智能指针类中。在这种情况下,我没有看到任何迹象表明后者是必要的,甚至可能是有用的。

class Playlist
{
private:
    vector<Track> tracklist;
public:
    void addTrack(const Track& track){
        tracklist.push_back(track);
    }
};

Song song("Rien de rien", "Biggy", 120);
Playlist playlist;
Track synthTrack;
playlist.addTrack(synthTrack);
song.setPlaylist(playlist);
cout << "Title " + song.getTitle() << endl;

或者,如果您想避免复制,请使用 std::unique_ptr 或 std::shared_ptr