gpt4 book ai didi

c++ - 尝试使用 cout 打印 vector 中包含的对象列表,但排序错误

转载 作者:太空宇宙 更新时间:2023-11-04 16:24:00 25 4
gpt4 key购买 nike

我有一个专为存储艺术家姓名(字符串)、专辑标题(字符串)和轨道对象列表( vector )而设计的专辑类。我正在尝试重载“<<”运算符以启用基于流的输出。

相关代码是这样的:

std::ostream& Album::printTracks (std::ostream &out, std::vector<Track> &t)
{
unsigned int i;
for (i=0; i<t.size(); i++)
out << " " << t.at(i);
return out;
}
std::ostream& operator<< (std::ostream &out, Album &a)
{
out << "Artist name: " << a.artistName << "\n" <<
"Album Title: " << a.albumTitle << "\n" <<
"Tracks: " << a.printTracks(out,a.getTracks());
return out;
}

应该按以下顺序打印:

  • 艺术家姓名
  • 专辑名称
  • 轨道列表

相反,当我给它测试数据时它会打印这个:

  • 轨道列表
  • 艺术家姓名
  • 专辑名称

“轨道:”后跟内存位置。

Constructor for "Track Class" is:
Track::Track (std::string t, Duration* d)
{
title = t;
duration = d;
}

在“track”类中重载“<<”的代码是:

std::ostream& operator<< (std::ostream &out, Track &t)
{
out << "Title: " << t.title << "\n" <<
"Duration: " << *t.duration << "\n";
return out;
}

最终用于输出的代码是:

Duration* d = new Duration(3,4,50); //creating duration objects for testing
Duration* d2 = new Duration(5,7,300);
Duration* d4 = new Duration(3,3,50);
Track t1 = Track("Test",d); //creating track objects
Track t2 = Track("Test2",d2);
Track t3 = Track("Test3",d4);
std::vector<Track> tracks; //forming tracks into vector
tracks.push_back(t1);
tracks.push_back(t2);
tracks.push_back(t3);
Album a = Album("Test Artist","Test Album",tracks); //create album object
cout << a << endl; // output album object

想知道为什么订单没有按预期打印?

最佳答案

未指定参数的计算顺序。其中一个参数有副作用(打印轨道),因此如果先计算它,您会看到先打印的那些。

关于c++ - 尝试使用 cout 打印 vector 中包含的对象列表,但排序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13851446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com