我有Class
处理音乐专辑。 artists
和albums
为strings
。它还有一个名为vector
的曲目集合(contents
)。每首曲目都有title
和duration
。
这是我的ostream <<
:
ostream& operator<<(ostream& ostr, const Album& a){
ostr << "Album: " << a.getAlbumTitle() << ", ";
ostr << "Artist: " << a.getArtistName() << ", ";
ostr << "Contents: " << a.getContents() << ". "; //error thrown here
return ostr;
}
<<
旁边的a.getContents()
标有下划线并说:"Error: no operator "<<" matches these operands.
我错过了什么或做错了什么?你不能以这种方式使用向量吗?或者也许是我在Track课程中遗漏的东西?
答案 0 :(得分:3)
假设Album::getContents()
返回std::vector<Track>
,您需要提供
std::ostream& operator<<(std::ostream& o, const Track& t);
和
std::ostream& operator<<(std::ostream& o, const std::vector<Track>& v);
后者可以使用前者。例如:
struct Track
{
int duration;
std::string title;
};
std::ostream& operator<<(std::ostream& o, const Track& t)
{
return o <<"Track[ " << t.title << ", " << t.duration << "]";
}
std::ostream& operator<<(std::ostream& o, const std::vector<Track>& v)
{
for (const auto& t : v) {
o << t << " ";
}
return o;
}
有一个C ++ 03演示here。
答案 1 :(得分:0)
如果Album::getContents()
是关于你的向量而你只是返回vector
而不是ostream
不知道如何编写它,因为没有'<<' operator
。
只需重载'<<' operator
的{{1}},您就会感到高兴。