什么导致类型不完整?(QGraphicsItem:源或目标具有不完整的类型)

What leads to incomplete types? (QGraphicsItem: Source or target has incomplete type)

本文关键字:类型 目标 什么 QGraphicsItem      更新时间:2023-10-16

我有一个自定义的QGraphicsItem,它(除其他外)在单击时将光标更改为张开的手,使用Qt文档中描述的标准过程。这在过去两周左右的工作中运作良好。昨天,我在班里做了一些改变。最重要的是,我现在直接从QGraphicsPixmapItem而不是QGraphicsItem进行子类化。

在某个时候,我开始收到以下错误(部分是我自己的翻译):

C664:将参数 1 从"Qt::光标形状"转换为"const Q不可能。源或目标的类型不完整。

我现在尝试弄清楚为什么我的项目类型不完整。不幸的是,我无法追溯这个问题开始发生的确切时间。更改基类是我唯一的猜测,但我真的想不出如何成为原因的方法。在谷歌搜索错误之后,我找到了示例,其中类的成员有些定义不明确,但我在声明中找不到错误。所以,这是标题,以防我错过了什么:

#include <QGraphicsPixmapItem>
class Collection;
class ItemSource;
class PhotoItem : public QGraphicsPixmapItem
{
public:
    PhotoItem( QString sourceFilePath, Collection *collection =0, QColor color =Qt::white, qreal size = 80.0);
    enum Orientation    { portrait, landscape };
    QPixmap content();
    bool hasContent();
    QColor color();
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
    QRectF boundingRect() const;
    void mousePressEvent(QGraphicsSceneMouseEvent *event);
    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
    void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
private:
    qreal _size;
    Orientation _orientation;
    QPixmap _content;
    QColor _color;
    Collection *_collection;
    ItemSource *_source;
};

如果此文件正确,那么是否有任何常见问题导致我可以签出的未定义类型?也许我什至搜索错了地方?

谢谢你的时间,路易丝

是什么导致类型不完整?

当不包含定义类型的头文件时,添加以下行:

class myclass;

它向前声明了类 myclass,这意味着对于编译器来说它是一个不完整的类型。对于不完整类型,人们不能创建它的对象或做任何需要编译器知道myclass布局的事情,而不是myclass只是一个类型。即:编译器不知道它的成员是什么,它的内存布局是什么。但是,由于指向所有对象的指针只需要相同的内存分配,因此当仅引用不完整类型作为指针时,可以使用前向声明。

简而言之,您正在向前声明一个类,然后执行一些需要编译器知道该类布局的操作,因为编译器不知道它,因此会出现错误。

前向声明通常在你的头中很好,只要确保你在顶部的相应代码文件中包含类的头(例如 #include "itemsource.h" )。

回应编辑:如果我确定我正确地包含了自己的标头,但仍然收到不完整的类型错误,那么下一步将是更改整个Qt包的#include <QGraphicsPixmapItem>。除非有明确可识别的好处,否则我总是赞成完全包括套餐。它只是确保满足该包的内部依赖项。

最后,在Qt 4.x中,QGraphicsPixmapItem似乎在QtGui中,但在5.x中已移至QtWidgets。因此,如果您使用 4,请尝试用 #include <QtGui> 替换 #include <QGraphicsPixmapItem>,对于 5,请尝试#include <QtWidgets>

相关文章: