C++ 试图使用cout打印向量中包含的对象列表,结果排序错误

C++ 试图使用cout打印向量中包含的对象列表,结果排序错误,c++,io,operator-overloading,C++,Io,Operator Overloading,我有一个album类,用于存储和编辑艺术家姓名(string)、albumtitle(string)和曲目对象列表(vector)。我正在尝试重载“未指定参数的求值顺序。其中一个参数有副作用(打印曲目),因此如果先求值,您将首先看到打印的参数。未指定参数的求值顺序。其中一个参数有副作用(打印曲目),因此,如果先对其求值,您将首先看到打印的内容。作为旁注,您应该通过常量引用获取打印的内容。请发布一篇文章,重新创建您的错误,以便我们能够及时帮助您。@Code Guru,这意味着提供一整套代码,存储在

我有一个album类,用于存储和编辑艺术家姓名(string)、albumtitle(string)和曲目对象列表(vector)。我正在尝试重载“未指定参数的求值顺序。其中一个参数有副作用(打印曲目),因此如果先求值,您将首先看到打印的参数。

未指定参数的求值顺序。其中一个参数有副作用(打印曲目),因此,如果先对其求值,您将首先看到打印的内容。

作为旁注,您应该通过常量引用获取打印的内容。请发布一篇文章,重新创建您的错误,以便我们能够及时帮助您。@Code Guru,这意味着提供一整套代码,存储在7个不同的文件中,与问题无关em,但几乎是正确编译所需的全部。@将军,你读了我提供的链接了吗?7个与当前问题基本无关的代码文件从定义上讲不是SSCCE。@代码专家,公平地说,给出的代码示例很短且完全相关,他们提供了回答此问题所需的所有信息e问题。但是,是的,我同意sscce几乎总是一个很好的提问工具,是的,制定一个sscce有时可以解决您的问题。作为补充说明,您应该通过常量引用来记录您正在打印的内容。请发布一个重新创建错误的日志,以便我们能够及时帮助您。@Code Guru,这意味着给出一个存储在7个不同文件中的全部代码,与问题无关,但几乎都是正确编译所需的。@将军您阅读了我提供的链接了吗?7个与当前问题基本无关的代码文件从定义上讲不是SSCCE。@代码大师,公平地说,给出的代码示例很简短非常相关,他们提供了回答问题所需的所有信息。但是,是的,我同意sscce几乎总是提问的好工具,是的,制定一个sscce有时可以解决您的问题。@常规,在第一个输出语句之后在单独的输出语句中打印曲目。@TheGeneral:
…“曲目:"; a、 printTracks(out,a.getTracks())
是一种方法。我认为最好是将printtracks制作成
operator@TheGeneral,按
*t.duration
,您是否键入了
&t.duration
?无论哪种方式,都应该是
t.duration
。如果它打印出类似于
0x401568FC
的内容,那就是内存地址。为了避免混淆,我坚持使用address over register。@TheGeneral,那么您必须确保传入类的内容足够长,因为您复制的是构造函数中的指针,而不是对象。另外,我假定
持续时间
operator@TheGeneral,在第一个输出语句后的单独输出语句中打印曲目。@TheGeneral:
。。。“轨道:”;a、 printTracks(out,a.getTracks())
是一种方法。我认为最好是将printtracks制作成
operator@TheGeneral,按
*t.duration
,您是否键入了
&t.duration
?无论哪种方式,都应该是
t.duration
。如果它打印出类似于
0x401568FC
的内容,那就是内存地址。为了避免混淆,我坚持使用address over register。@TheGeneral,那么您必须确保传入类的内容足够长,因为您复制的是构造函数中的指针,而不是对象。另外,我假定
持续时间
运算符
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;
    }
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