错误:与“运算符<<' (operand types are 'QTextStream' and 'const char [3]')

问题描述 投票:0回答:1

这是一段基于 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。最近这一切都没有以有意义的方式发生改变。

c++ qt compiler-errors operator-overloading
1个回答
0
投票

QTextStream
有一个
operator<<(const char*)
应该在这里被调用。

这一直有效到今天!

最可能的原因是定义

operator<<
的文件本身并不
#include <QTextStream>
,而是依赖于从其他地方获取它。 这有时被称为“泄漏标头”,可能会导致代码被 Qt 更新或其他看似不相关的包含更改所破坏。

QTextStream
可能仍在某处向前声明,但
operator<<
需要包含。 另请参阅“包括您使用的内容”

© www.soinside.com 2019 - 2024. All rights reserved.