我有以下非常简单的课程:
#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
有人知道我做错了吗?
答案 0 :(得分:5)
我假设你在谈论Qt&#39; Q_DECALRE_METATYPE
?这在#include <QMetaType>
中定义。添加包含。以下是文档的链接:Qt5.5 QMetaType
来自doc:
的引用理想情况下,此宏应放在类或结构的声明下面。如果无法做到这一点,可以将其放入私有头文件中,每次在QVariant中使用该类型时都必须包含该文件。
添加Q_DECLARE_METATYPE()使所有基于模板的函数都知道类型,包括QVariant。请注意,如果您打算在排队信号和插槽连接中使用类型,或者在QObject的属性系统中使用,则还必须调用qRegisterMetaType(),因为名称是在运行时解析的。