C ++ ostream<<操作者

时间:2012-12-10 20:45:52

标签: c++ operators

我有Class处理音乐专辑。 artistsalbumsstrings。它还有一个名为vector的曲目集合(contents)。每首曲目都有titleduration

这是我的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课程中遗漏的东西?

2 个答案:

答案 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}},您就会感到高兴。