2010-12-01 10 views
5

`への未定義参照:BaseRenderer」C++ - 私はこのエラーを取得した理由私は思っていたのvtable

ためのvtable`へ 未定義の参照は、私の周り探してみましたが、これを見つけ出すように見えることはできません。私は

マイBaseRenderer.h

は、どのように私が退治に行くか私のBaseRenderer.cpp

など、コンストラクタを削除、仮想関数を取り払う
BaseRenderer::BaseRenderer()    <------ Error leads me here 
{ 
} 

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

} 

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

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; 

}; 

を試してみましたこの問題の?私はそれがコンパイラかもしれないと聞いて...?ヘルプ:)

+0

コンパイラに渡されるパラメータは何ですか? – sashang

+0

Q_OBJECTとは何ですか? –

+0

@John - これはQtマクロです。つまり、このソースファイルは、スロットやシグナルなどのQt固有の動作のために生成されるコードのために別のQtツール( 'moc.exe')を実行する必要があります。 – birryree

答えて

9

Q_OBJECTは親クラスRendererに含まれているため、BaseRendererを含める必要はありません。ただ、Q_OBJECTを取り除くと、それが動作するはずです:)

+0

それは私のために働く。 Q_OBJECTを削除することでこれを解決する理由を詳細に説明できますか? QWidgetのサブクラス – swdev

1

ため おかげで、私はこの非常に助けにならないメッセージが本当にあなたのbaseRenderer.cppファイルのみ、コンストラクタとデストラクタを持っているようだとして、あなたが、あなたのBaseRendererクラスの他の関数の定義を提供していない文句を言っていると思います。

1

すべての宣言されたメソッド、特にスロットを実装するようにしてください。その後、ヘッダーが.proファイルのHEADERSセクションにリストされていることを確認し、qmakeを実行します。

関連する問題