2011-08-06 60 views
0

我似乎無法動搖此錯誤後使PrimitivePartsWrapper QObject的子類(包括Q_OBJECT宏)。QObject創建moc文件,但仍然得到vtable錯誤

undefined reference to `vtable for PrimitivePartsWrapper` (in register.o) 

我跑了qmake,moc_primitive.cpp包含在makefile中。它似乎只發生在Qt的創造者。如果我在命令行上運行make,程序會編譯,但是在我的嵌入式python中出現錯誤,無法找到可能不相關的PrimitiveParts類。 QtCreator中的錯誤與register.o而不是primitive.o有什麼關係?或者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; 
    } 
}; 

回答

1

您沒有提供所有的代碼,但無論如何嘗試清理項目,重新運行的qmake和重建所有。

+0

我無法提供我所有的代碼,因爲它有成千上萬行。我試過清理所有的東西,運行qmake並重建所有的東西。 – voodoogiant

+0

我試圖編譯你的代碼,它似乎確定。那個錯誤通常意味着有一個虛擬功能沒有實現。你是否已經試圖實現構造函數和析構函數? –

相關問題