将对象推送到矢量时没有输出
No output when object is pushed to vector
我的模型非常简单,但我使用的向量遇到了一些问题。
基本上,我有一个具有一个播放列表的 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
相关文章:
- 无法输出对象的红色/绿色/蓝色值
- 为对象分配整数.输出将是什么?
- 为什么两种不同的对象初始化方式给出不同的输出
- 尝试重载输出运算符时,我无法遍历对象向量
- 如何在 c++ 中使用 for 循环输出矢量中的所有对象
- IM 试图显示对象数组,但它给出了错误的输出
- C++对象数组的文件输出
- OBJDUMP给出了具有和没有-fpic的对象文件的相同输出
- 我使用箭头运算符打印出对象的变量值,并得到一些随机值作为输出
- 对象实例化后不输出
- 打印对象矢量的意外输出
- 具有GSOAP的序列化对象,以验证Web服务输出
- C++输出对象中的所有成员
- 如何仅在对象存在/特定情况下输出对象的某个部分?
- C++ 将数组打印到任何输出对象(按函数)
- ".hidden"输出对象转储 -t 的输出是什么意思?
- 输出对象中唯一字符的数量
- 流操作,用于以不同格式输出对象数据
- 重载运算符<<在不使用友元函数的情况下输出对象成员
- 输出对象的多维向量