运算符的解释<<超载

时间:2012-04-02 00:20:15

标签: c++ operator-overloading

我试图了解运算符重载的工作原理。

我想编写代码以便我可以编写

Log(Log::LEVEL_ERR) << "fatal error: " << 13 ; 

对于字符串和数字,使用重载运算符。

我现在有

class Log{
  public:
    std::ostream& operator<<(char const*);
}

std::ostream& Log::operator<<(char const* text){
  if (Log::isToWrite()) {
    printLevel();
    std::cout << text;
  }
  return std::cout;
}

这只是字符串而不是数字,为什么?

修改 @bitmask为了清楚起见,你的意思是这样的实现:

class Log{
  public:
    friend  Log& operator<<(Log& in, char const* text);
}

friend  Log& operator<<(Log& in, char const* text){
  if (in.isToWrite()) {
    in.printLevel();
    std::cout << text;
  }
  return std::cout;
}

因为我现在到处都是:

  

错误:语义问题:二进制表达式的操作数无效('Log'和'const char [15]')

也许这很简单,但你可以为我拼出来吗? 我真的没有得到它。

1 个答案:

答案 0 :(得分:1)

由于您返回了ostream&,因此下一个<<运算符与operator<<(ostream&, int)匹配。您应该return *this;(类型为Log&),以便下一个<<运算符匹配为您的类定义的运算符。