1

私はこのメンバー関数を持っています

std::ostream& operator<<(std::ostream &stream) const

Histogram<T>

それから別のクラスで私は

static void write(const RGBHistogram<T> &hist, Output &output)
{
    std::cout << hist.redHist << std::endl;
}

redHist、greenHist、blueHistはヒストグラムです。

ヒストグラム型の右側のオペランドをとる演算子が見つからないと文句を言うのはなぜですか?

4

2 に答える 2

6

演算子<<は、意味のあるフリー関数として実装する必要があります。

//inside class definition
//still free function
friend std::ostream& operator<<(std::ostream &, const Histogram &) 
{
}

または、クラス外で定義することもできます。(クラスの機能をグループ化するので、このようにするのが好きです)

于 2012-09-13T10:06:54.013 に答える
5

クラスの参照を渡す必要があり、メンバー関数ではなく友達である必要があります。

friend std::ostream& operator<<(std::ostream &ostream, const RGBHistogram<T> &stream)
{

  // do something.
  return ostream;
}
于 2012-09-13T10:10:47.447 に答える