这是一段基于 Qt 的代码,已经有一年了,我可能在各种上下文中编译过很多很多次,而且每次我都不知道。它位于一个名为
DPolygon.cpp
的文件中,我们似乎正在定义 DPolygon
(不知道这是什么):
QTextStream& operator<<(QTextStream& stream, const DPolygon& polygon)
{
std::for_each(polygon.constBegin(), polygon.constEnd(),
[&stream](const QPointF& pnt) { stream << "( "<< pnt.x() << ", " << pnt.y() << " ) "; } );
return stream;
}
今天我(新)收到此错误:
error: no match for 'operator<<' (operand types are 'QTextStream' and 'const char [3]')
236 | [&stream](const QPointF& pnt) { stream << "( "<< pnt.x() << ", " << pnt.y() << " ) "; } );
| ~~~~~~ ^~ ~~~~
| | |
| | const char [3]
| QTextStream
在
qtextstream.h
的声明中QTextStream
我可以看到:
QTextStream &operator<<(const char *c);
我知道数组和指针并不完全相同,但这直到今天都有效!可能发生什么改变或发生什么?我还可以提供哪些其他信息有帮助?
这实际上是在我单击“重建”时第一次出现的。
我们使用 Qt 5.12.11 和 Qt Creator 12.0.1 以及 CMake 至少 3.19 和 MinGW 7.3.0。最近这一切都没有以有意义的方式发生改变。
QTextStream
有一个 operator<<(const char*)
应该在这里被调用。
这一直有效到今天!
最可能的原因是定义
operator<<
的文件本身并不 #include <QTextStream>
,而是依赖于从其他地方获取它。
这有时被称为“泄漏标头”,可能会导致代码被 Qt 更新或其他看似不相关的包含更改所破坏。
QTextStream
可能仍在某处向前声明,但 operator<<
需要包含。
另请参阅“包括您使用的内容”