2013-03-30 41 views
1

我想繼承QObject和另一個類,並得到一個錯誤: 'vtable for EduGraph'未定義的參考' 我已經讀過一些關於它的線程並修復了類中繼承類的順序定義,但它沒有解決問題。與QObject的多繼承

class EduGraph : public QObject, public Graph<Vertex<ENode, EEdge>*> { 
private: 
    std::list<Vertex<ENode, EEdge>*>::iterator firstSel; 
    std::list<Vertex<ENode, EEdge>*>::iterator secSel; 
public: 

Q_OBJECT 

    EduGraph() : firstSel(0), secSel(0) {} 
    ~EduGraph(); 

    void NewNode(const QPoint& p); 
    void RemoveNode(); 
    void Associate(); 
    void Dissociate(); 

signals: 
    void VertexSelected(); 
    void VertexDeSelected(); 
}; 
+0

您確定需要多重繼承嗎?從上面的代碼中,使用組合看起來會起作用(即在你的類中有一個'Graph <...>'成員,而不是從它繼承)。 – Mat

+0

[未定義的Qt引用vtable]可能的重複(http://stackoverflow.com/questions/15656902/undefined-reference-to-vtable-in-qt) –

+0

此外,[C++未定義引用vtable和繼承]( http://stackoverflow.com/questions/9406580/c-undefined-reference-to-vtable-and-inheritance) –

回答

2
`Undefined reference to `vtable for...'` 

通常是未實現的虛擬功能的標誌。 確保您已實施(定義)從基類繼承的相應虛擬功能。

例如,這會給你同樣的錯誤,因爲B中的打印方法沒有實現。

class A { 
public: 
    virtual void print() = 0; 
}; 

class B : public A{ 
public: 
    void print(); 
}; 

int main() 
{ 
    B b; 
} 
+0

除非您實際調用'print'方法,否則您的示例將[不會出現任何錯誤](http://ideone.com/N8acL1)。 –

+0

它至少在gcc 4.4.0上給出錯誤消息。 **如果您未聲明B **的實例,則不會收到錯誤消息。因此,我爲什麼主要做了一個決定。 – 2013-03-30 15:22:30

+0

[不,它沒有](http://ideone.com/N8acL1) –