我试图了解运算符重载的工作原理。
我想编写代码以便我可以编写
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]')
也许这很简单,但你可以为我拼出来吗? 我真的没有得到它。
答案 0 :(得分:1)
由于您返回了ostream&
,因此下一个<<
运算符与operator<<(ostream&, int)
匹配。您应该return *this;
(类型为Log&
),以便下一个<<
运算符匹配为您的类定义的运算符。