QObject creates moc file, but still getting vtable errors
I can't seem to shake this error after making PrimitivePartsWrapper a subclass of QObject (including the Q_OBJECT macro).
undefined reference to `vtable for PrimitivePartsWrapper` (in register.o)
I've ran qmake, and the moc_primitive.cpp is included in the makefile. It only seems to happen in Qt creator. If I run make on t开发者_JAVA技巧he command-line, the program compiles but I get an error in my embedded python not being able to find that PrimitiveParts class, which may be unrelated. Does the error in QtCreator have anything to do with register.o instead of primitive.o? Or moc_primitive.o?
primitive.h:
#ifndef PRIMITIVE_H
#define PRIMITIVE_H
#include "util.h"
class PrimitiveParts {
public:
QVector<Point3> points;
QVector<QList<int> > faces;
};
class PrimitivePartsWrapper : public QObject
{
Q_OBJECT
public slots:
PrimitiveParts* new_PrimitiveParts();
};
namespace primitive {
PrimitiveParts cubePrimitive(float width, float height, float depth);
};
#endif // PRIMITIVE_H
primitive.cpp:
#include "primitive.h"
PrimitiveParts* PrimitivePartsWrapper::new_PrimitiveParts()
{
return new PrimitiveParts();
}
namespace primitive {
PrimitiveParts cubePrimitive(float width, float height, float depth)
{
float hx = width / 2;
float hy = height / 2;
float hz = depth / 2;
// create the vertices
Point3 p0(hx,hy,hz);
Point3 p1(hx,hy,-hz);
Point3 p2(-hx,hy,-hz);
Point3 p3(-hx,hy,hz);
Point3 p4(hx,-hy,hz);
Point3 p5(hx,-hy,-hz);
Point3 p6(-hx,-hy,-hz);
Point3 p7(-hx,-hy,hz);
QList<int> f0 = QList<int>() << 0 << 1 << 2 << 3;
QList<int> f1 = QList<int>() << 4 << 5 << 1 << 0;
QList<int> f2 = QList<int>() << 6 << 2 << 1 << 5;
QList<int> f3 = QList<int>() << 7 << 3 << 2 << 6;
QList<int> f4 = QList<int>() << 7 << 4 << 0 << 3;
QList<int> f5 = QList<int>() << 4 << 7 << 6 << 5;
struct PrimitiveParts parts;
parts.points = QVector<Point3>() << p0 << p1 << p2 << p3 << p4 << p5 << p6 << p7;
parts.faces = QVector<QList<int> >() << f0 << f1 << f2 << f3 << f4 << f5;
return parts;
}
};
You didn't provide all the code, but anyway try to clean your project, re-run qmake and rebuild all.
精彩评论