我为应用程序中的特殊类型的日志记录重载了运算符:
CLogger * operator<<(CLogger *logger, QString &str)
{
if(logger != nullptr)
{
logger->getStream()->operator <<( str);
return logger;
}
else
return nullptr;
}
然后我试图以这种方式通过此运算符传递参数:
&myLog << "Hello";
其中myLog
是我CLogger
课程的内容。我收到了这个错误:
invalid operands of types 'CLogger*' and 'const char [6]' to binary 'operator<<'
&myLog << "Hello";
^
但如果我以这种方式传递QString
对象,一切都很好:
QString hi = "Hello";
&myLog << hi;
如何直接传递此字符串文字?
答案 0 :(得分:3)
您的问题是您的运营商需要QString &str
,这是一个左值参考。左值引用要求您将左值(命名对象)传递给它。所以在
&myLog << "Hello";
"Hello"
不是名为Qstring
的,因此您无法绑定它。你想要做的是采取const QString &str
。 const&
可以绑定到临时表,允许"Hello"
转换为临时Qsting
,然后您可以绑定到该临时表。
另一种选择是重载const char*
的运算符,它不需要转换,并允许您直接使用字符串文字。这可能是有利的,因为它可以使您免于Qstring
可能执行的动态内存分配。
另一个问题是你应该通过引用真正接受CLogger
实例。通过指针获取它可以阻止你为内置类型重载操作符,因为指针是内置类型,你不能重载它的操作符。