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

2019-06-23 13:38发布

我有一个自定义的QGraphicsItem,即(除其他外)变更光标移动到张开的手在被点击时,使用如Qt文档中描述的标准程序。 这在过去的两周左右的罚款。 昨天,我改变了一些东西类中。 最显著,我现在直接从QGraphicsPixmapItem代替的QGraphicsItem继承。

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

C664:参数1从 '的Qt :: CursorShape' 到 'const的QCursor&' 不可能的转换。 源或目标具有不完整的类型。

我现在试图找出为什么我的项目有一个不完整的类型。 不幸的是什么时候这个问题开始发生,我不能追溯。 更改后的基类是我唯一的猜测,但我真的不能想办法如何,这可能是原因。 谷歌搜索的错误后,我发现的例子,其中类的成员是有些界限不清,但我找不到我的声明错误。 所以,这里是标题,如果我错过了什么:

#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;
};

如果该文件是正确的,那么有没有导致未定义的类型,我可以检查出任何常见的问题? 也许我甚至在搜索放错了地方?

感谢您的时间,路易丝

Answer 1:

什么导致不完全类型?

当代替包括其定义类型的头文件,则添加一行:

class myclass;

向前声明MyClass类,这意味着编译器它是一个不完整的类型 。 使用不完全类型,不能创建它的对象或做任何需要编译器知道的比一个事实,即MyClass的只是一个MyClass类型更多的布局。 即:编译器不知道什么是它的成员以及它的内存布局。 但由于指针的所有对象只需要相同的内存分配,可以使用前置声明时刚刚reffering不完全类型的指针。

因此,在短期,你向前声明一个类,然后执行一些操作,这些操作需要编译器知道类的布局,由于编译器不知道它因此错误。



Answer 2:

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

为响应编辑:如果我确信我已经正确地包括我自己的头,我仍然得到不完整的类型错误,那么下一步将是改变#include <QGraphicsPixmapItem>整个Qt的包。 除非有一个清晰可辨的好处我总是青睐,包括包装完全。 它只是确保在包装的内部依赖性得到满足。

最后,在Qt 4.x的出现QGraphicsPixmapItem在QtGui但已被移出到5.x中QtWidgets 所以,如果你使用4尝试更换#include <QGraphicsPixmapItem>#include <QtGui>和5试#include <QtWidgets>



文章来源: What leads to incomplete types? (QGraphicsItem: Source or target has incomplete type)