0

Classミュージック アルバムを扱う があります。artistsとはalbumsですstringsvectorと呼ばれるトラックのコレクション ( ) もあります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 クラスに欠けているものでしょうか?

4

2 に答える 2

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 のデモがあります

于 2012-12-10T20:50:55.607 に答える
0

Album::getContents()があなたのベクトルについてであり、 を返すだけの場合はvectorostreamがないため、書き方がわかりません'<<' operator

'<<' operatoraをオーバーロードするだけvectorで満足です。

于 2012-12-10T20:53:25.660 に答える