这是困扰我的事情:我的头文件FAPPDebug.h中的operator <<重载,例如:QTextStream& operator << (QTextStream& a, FAPPDebug& b);以及FAPPDebug.cpp中的实现:QTextStream& operator << (QTextStream& a, FAPPDebug& b){ QString msg = *b.stream->ts.string(); // just take the message from b a << msg; return a;}和相应的函数调用:QTextStream(stdout) << (debug() << "Quitting because application object is not set.");不管这看起来多么奇怪,它都可以在Windows上使用MSVC2010进行编译(并且可以正常工作!)debug()只是从当前位置创建FAPPDebug对象的宏。请注意(debug()在使用g++ 4.4的Linux下,另一端出现以下错误: (有很多候选人,我只是保留了重要的内容)我已将函数调用修改为:::operator << (QTextStream(stdout), debug() << "Failed to schedule application startup.");我收到错误消息: 因此您可以看到每次都找到正确的函数(是的,MessageBroker.cpp中包含FAPPDebug.h header ),但是“更符合标准的”编译器无法使用它。我觉得这是我对某处标准的理解的一个小故障,因此我请求您的帮助以找到它。编辑:运算符在class FAPPDebug中声明为 friend EDIT2:debug()是一个宏,并且定义如下:#define debug() FAPPDebug(__LINE__, __FILE__, __PRETTY_FUNCTION__, LOG_DEBUG)即。它只是创建了一个FAPPDebug对象,其参数指示当前位置。谢谢!F。 最佳答案 我认为问题可能是您的插入运算符按预期方式接受了引用(左值)作为第一个参数,但是您正尝试传递从构造函数自动创建的右值。想想看,您如何期望自动创建的QTextStream(stdout)能够执行QTextStream(stdout)或者,您可以只声明一个像QTextStream qout(stdout)这样的变量,而改用qout。
09-07 09:07