什么导致类型不完整?(QGraphicsItem:源或目标具有不完整的类型)
What leads to incomplete types? (QGraphicsItem: Source or target has incomplete type)
我有一个自定义的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>
。
- 如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 如果输入类型与目标类型不同,"cin"变量是否重置为某个默认值?
- memcpy是否取决于源指针和目标指针的类型
- CMake:什么是可能的目标源类型?它们可以扩展吗
- 对类型的非常量左值引用 - 使用类类型的参数时,目标C++包装器中的错误
- 致命错误LNK1112:在 npm 安装期间,模块计算机类型'X86'与目标计算机类型'x64'冲突
- 模块计算机类型和目标计算机类型 Visual Studio 2013
- 是动态铸造所需的目标类型
- 转换逻辑目标是什么类型
- 将参数转换为目标类型时,复制用于直接初始化的构造函数省略
- 致命错误LNK1112:通过 vcvarsall .bat x86 运行构建'X86'模块计算机类型'x64'与目标计算机类型冲突
- QtGui4.lib(QtGui4.dll):致命错误LNK1112:模块计算机类型"X86"与目标计算机类型"x64"冲突
- CLASS_NAME未声明 - 无法dynamic_cast(目标不是指向完整类型的指针或引用)
- LNK1112:模块计算机类型"x64"与目标计算机类型"X86"冲突:Qt创建者
- 什么导致类型不完整?(QGraphicsItem:源或目标具有不完整的类型)
- msvcprtd.lib(MSVCP100D.dll):致命错误LNK1112:模块计算机类型"X86"与目标计算机类型"x64"冲突
- 将模板参数作为目标类型传递