Вот что меня беспокоит: я перегруженный operator <<
в файле заголовка FAPPDebug.h, такие как:перегружен << оператора в C++ не найден
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() < < «...») без этого он не производит то, что я хочу.
На другом конце под Linux с г ++ 4.4, я получаю следующее сообщение об ошибке:
MessageBroker.cpp:91: error: no match for ‘operator<<’ in ‘QTextStream(stdout, QFlags((QIODevice::OpenModeFlag)3u)) << ((FAPPDebug*)((FAPPDebug*)FAPPDebug(417, ((const char*)"MessageBroker.cpp"), ((const char*)(& PRETTY_FUNCTION)), (LogLevel)7u).FAPPDebug::operator<<(((const char*)"Module")))->FAPPDebug::operator<<(((const QString&)((const QString*)(& ModuleBase::getModuleDescription()())))))->FAPPDebug::operator<<(((const char*)"Quitting because application object is not set."))’ /usr/local/Trolltech/Qt-4.8.2/include/QtCore/qtextstream.h:184: note: candidates are: FAPPDebug.h:94: note: QTextStream& operator<<(QTextStream&, FAPPDebug&)
(Там много кандидатов, я только сохранил то, что важно)
Я модифицировал вызов функции будет:
::operator << (QTextStream(stdout), debug() << "Failed to schedule application startup.");
и я получаю сообщение об ошибке:
MessageBroker.cpp: In member function ‘bool MessageBroker::init(Application*, const QString&)’: MessageBroker.cpp:91: error: no matching function for call to ‘operator<<(QTextStream, FAPPDebug&)’ /usr/local/Trolltech/Qt-4.8.2/include/QtCore/qchar.h:396: note: candidates are: QDataStream& operator<<(QDataStream&, const QChar&) /home/ferenc/work/trunk/Core/Common/FAPPDebug.h:94: note:
QTextStream& operator<<(QTextStream&, FAPPDebug&)
, так как вы можете видеть, что правильная функция найдена каждый раз (да, заголовок FAPPDebug.h включен в MessageBroker.cpp), но компилятор «более стандартного соответствия» не смог его использовать. У меня такое ощущение, что это глюк в моем понимании стандарта где-то, поэтому я прошу вас помочь найти его.
EDIT: оператор объявлен в другом class FAPPDebug
EDIT2: отладки() является макросом, и определяется как:
#define debug() FAPPDebug(__LINE__, __FILE__, __PRETTY_FUNCTION__, LOG_DEBUG)
то есть. он просто создал объект FAPPDebug с параметрами, указывающими текущую позицию.
Спасибо! f.
не все еще не работает, в этом случае он обнаруживает 'FAPPDebug.h: 94: note: QTextStream & operator << (QTextStream &, const FAPPDebug &)' функция, но все равно не делает соединение – fritzone
Каков тип ' отладки() '? Если это не константная ссылка на 'QTextStream', ваша функция не может быть вызвана. С помощью 'const' правый операнд может быть временным (включая результаты неявного преобразования). –