书写文件如下
#include <QObject>
#include <QScopedPointer>
class ElementPrivate;
class Element : public QObject
{
public:
Element();
virtual ~Element() {}
protected:
explicit Element(ElementPrivate *d_ptr);
const QScopedPointer<ElementPrivate> d_ptr;
};
上面编译时,会出现以下报错信息:
/home/init02/Qt5.10.1/5.10.1/gcc_64/include/QtCore/qscopedpointer.h:57: error: invalid application of ‘sizeof’ to incomplete type ‘ElementPrivate’
typedef char IsIncompleteType[ sizeof(T) ? 1 : -1 ];
^
错误原因
QScopedPointer智能指针使用的对象必须是完整的,必须包含相应对象的实现方式。
改正方法
在上面的文件中加入ElementPrivate类的定义头文件,再次编译,就可以通过了。