簡體   English   中英

添加“使用名稱空間std”時,C ++對vtable的未定義引用

[英]C++ Undefined reference to vtable when adding “using namespace std;”

#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;”時,錯誤消失了。 線。 如何在不刪除該行的情況下解決此錯誤? 還是提供使用字符串變量類型的另一種方法?

發生錯誤是因為在您的情況下,已聲明但未定義虛擬方法

virtual string get();

在代碼的某處,您要告訴編譯器通過實例化為Object發出vtable,例如

Object* o = new Object();

您必須定義它,或者如果您想讓子類實現它,則將其顯式標記為純:

virtual string get() = 0;

在這兩種情況下(將其設為未實現或將其標記為純),您將無法直接實例化Object實例,因為該對象的實現不完整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM