【发布时间】:2012-06-15 08:28:31
【问题描述】:
这是困扰我的问题:我在头文件 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.");
不管这看起来多么奇怪,它都可以在带有 MSVC2010 的 Windows 下编译(并且可以工作!)
debug() 只是一个从当前位置创建 FAPPDebug 对象的宏。请注意 (debug()
在使用 g++ 4.4 的 Linux 下,我收到以下错误:
MessageBroker.cpp:91: 错误:'operatorPRETTY_FUNCTION)), (LogLevel)7u).FAPPDebug::operatorFAPPDebug::operatorFAPPDebug::operator
(候选人很多,我只保留重要的)
我已将函数调用修改为:
::operator << (QTextStream(stdout), debug() << "Failed to schedule application startup.");
我收到错误消息:
MessageBroker.cpp:在成员函数'bool MessageBroker::init(Application*, const QString&)': MessageBroker.cpp:91:错误:没有匹配的调用函数 ‘操作员 QTextStream& 运算符
所以你可以看到每次都能找到正确的函数(是的,FAPPDebug.h 头文件包含在 MessageBroker.cpp 中),但“更符合标准”的编译器未能使用它。我觉得这是我对某处标准的理解中的一个小故障,所以我请求您帮助找到它。
编辑:运算符在class FAPPDebug中被声明为朋友
EDIT2:debug() 是一个宏,定义如下:
#define debug() FAPPDebug(__LINE__, __FILE__, __PRETTY_FUNCTION__, LOG_DEBUG)
即。它只是创建了一个 FAPPDebug 对象,其参数指示当前位置。
谢谢! f.
【问题讨论】:
标签: c++ operator-overloading stream-operators