2015-11-19 63 views
0
#include <QGraphicsScene> 

using namespace std; 

class Object 
{ 
    public: 
    Object(){}; 
    virtual ~Object(){}; 
    virtual void draw(QGraphicsScene * s, int x, int y){}; 
    virtual string get(); 
}; 

我收到一條錯誤消息,提示「未定義對象的vtable引用」。錯誤發生在構造函數和析構函數上。當我刪除「using namespace std;」時錯誤消失線。如何修復此錯誤而不刪除該行?或者提供另一種使用字符串變量類型的方法?C++在添加「using namespace std;」時未定義對vtable的引用

+0

您是否包含或使用STL庫? – Joel

+0

在任何一種情況下,代碼都是不合格的,因此無論如何您都應該解決問題(通過爲您的虛擬功能提供實體)。 –

+0

它不會解決你的問題,但你最好刪除'using namespace std;'它會導致各種奇怪的錯誤。在這裏閱讀更多:http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice – user4581301

回答

1

錯誤的發生是因爲一個虛擬方法聲明,但沒有定義,在您的情況這是

​​

和地方在你的代碼告訴編譯器通過實例它發出的虛函數表爲Object,如

Object* o = new Object(); 

你必須定義它,或者如果你想讓子類實現它,明確地將其標記爲純:

virtual string get() = 0; 

在這兩種情況下(讓它未實現或標記爲純),您將無法直接實例化一個Object實例,因爲該對象具有不完整的實現。

相關問題