为什么我的运算符重载不编译?

时间:2012-09-13 10:05:02

标签: c++

我有这个成员函数

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是直方图。

为什么它抱怨没有运算符找到哪个采用直方图类型的右手操作数?

2 个答案:

答案 0 :(得分:6)

必须将运算符<<实现为有意义的自由函数:

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

或者,您可以在课外定义它。 (我更喜欢这样,因为它将类功能组合在一起)

答案 1 :(得分:5)

你应该传递你的班级的参考,它应该是朋友而不是成员函数。

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

  // do something.
  return ostream;
}