C ++在添加“using namespace std;”时对vtable的未定义引用

时间:2015-11-19 00:40:30

标签: c++

#include <QGraphicsScene>

using namespace std;

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

我收到错误提示“未定义对vtable for Object”的引用。构造函数和析构函数都会发生错误。当我删除“using namespace std;”时,错误消失了线。如何在不删除该行的情况下修复此错误?或者提供另一种使用字符串变量类型的方法?

1 个答案:

答案 0 :(得分:1)

发生错误是因为在您的情况下声明了虚拟方法但未定义

virtual string get();

在代码中的某处,您告诉编译器通过实例化它来发出Object的vtable,例如

Object* o = new Object();

您必须定义它,或者如果您想让子类实现它,请将其明确标记为纯:

virtual string get() = 0;

在这两种情况下(让它未实现或将其标记为纯),您将无法直接实例化Object实例,因为该对象的实现不完整。