Q_DECLARE_METATYPE抛出缺少的类型说明符错误

时间:2016-03-11 11:51:59

标签: c++ qt

我有以下非常简单的课程:

#ifndef SLAVECALIBRATIONGRAB
#define SLAVECALIBRATIONGRAB

#include <stdint.h>

class SlaveCalibrationGrab{
public:
    SlaveCalibrationGrab() : data(0) {}
    SlaveCalibrationGrab(int data_) : data(data_){}

    SlaveCalibrationGrab(const SlaveCalibrationGrab& other){
        data = other.data;
    }


    ~SlaveCalibrationGrab(){}

private:
   int data;
};

Q_DECLARE_METATYPE(SlaveCalibrationGrab);

#endif

这会引发以下错误:

C4430: missing type specifier - int assumed. Note: C++ does not support default-int

有人知道我做错了吗?

1 个答案:

答案 0 :(得分:5)

我假设你在谈论Qt&#39; Q_DECALRE_METATYPE?这在#include <QMetaType>中定义。添加包含。以下是文档的链接:Qt5.5 QMetaType

来自doc:

的引用
  

理想情况下,此宏应放在类或结构的声明下面。如果无法做到这一点,可以将其放入私有头文件中,每次在QVariant中使用该类型时都必须包含该文件。

     

添加Q_DECLARE_METATYPE()使所有基于模板的函数都知道类型,包括QVariant。请注意,如果您打算在排队信号和插槽连接中使用类型,或者在QObject的属性系统中使用,则还必须调用qRegisterMetaType(),因为名称是在运行时解析的。