2010-12-01 16 views
5

vtable: Etrafa aramaya çalıştım ama bu anlamaya gibi olamaz BaseRenderer'C++ - için Tanımsız referans `Ben bu hatayı almaya neden merak ediyorum

için vtable` üzere tanımsız referansı. Ben kurtulmak alma hakkında gitmek nasıl yapıcı kaldırarak, sanal fonksiyonunun kurtulmak

class BaseRenderer : public Renderer 
{ 
Q_OBJECT 

    public: 
     BaseRenderer(); 
     BaseRenderer(QWidget *parent); 
     void paintGL(); 

     virtual ~BaseRenderer(); 

public slots: 
    void loadDialog(); 

signals: 

    protected: 
     Mesh loadMesh(string fileName); 

    private: 

     OBJParser objParser; 
     Mesh baseTerrain; 

}; 

Benim BaseRenderer.cpp

BaseRenderer::BaseRenderer()    <------ Error leads me here 
{ 
} 

BaseRenderer::BaseRenderer(QWidget *parent) : Renderer(parent) 
{ 

} 

BaseRenderer::~BaseRenderer() 
{ 
    //dtor 
} 

vb

Benim BaseRenderer.h denedim bu sorunun Ayrıca derleyici olabileceğini duydum ...? yardım :)

+0

Derleyiciye iletilen parametreler nelerdir? – sashang

+0

Q_OBJECT nedir? –

+0

@John - bu bir Qt makrosu, yani bu kaynak dosyanın yuva ve sinyaller gibi Qt'ye özgü davranışlar için oluşturulacak kodlar için ayrı bir Qt aracı ('moc.exe') üzerinden çalıştırılması gerektiği anlamına gelir. – birryree

cevap

9

Q_OBJECT, üst sınıftaki Render kullanıcısı olduğundan, buna BaseRenderer eklemeniz gerekmez. Sadece Q_OBJECT kurtulmak ve onu :)

+0

Benim için çalışıyor. Q_OBJECT'i kaldırmak neden bu sorunu çözebilir? QWidget’ten – swdev

1

için teşekkürler ben bu son derece yararsız iletinin gerçekten baseRenderer.cpp dosya sadece yapıcı ve yıkıcı gibi görünüyor sunduğundan BaseRenderer sınıftaki diğer fonksiyonlar için tanımları sağlamıyor şikayet düşünüyorum.

1

Bildirilen tüm yöntemleri, özellikle de yuvayı uyguladığınızdan emin olun. Sonra, başlığınızın .pro dosyasındaki HEADERS bölümünde listelendiğini ve qmake komutunu çalıştırdığını kontrol edin.

İlgili konular