在实现类之前声明指针的麻烦

时间:2013-09-21 12:46:42

标签: c++ class pointers compilation

ConverterProxy *pthis;

ConverterProxy::ConverterProxy() {
    pthis = this;
    converter::callWhenUpdated(&CallBack);
}

void ConverterProxy::CallBack() {

    pthis->updatedOutside();

}

ConverterProxy::~ConverterProxy() {

    delete pthis;

}

部首:

class ConverterProxy
{

    Q_OBJECT


public:

    ConverterProxy();
    ~ConverterProxy();

    static void CallBack();

signals:
    void updatedOutside();

};

这会引发错误:undefined reference to 'vtable for ConverterProxy'

当我在构造函数的实现之后放置ConverterProxy *pthis;时,该错误消失了。

这种奇怪情况的原因是什么?

2 个答案:

答案 0 :(得分:2)

我不是QT的专家,但让我猜怎么解决你的问题。 您的代码中有一些与QT相关的内容:

Q_OBJECT

我不知道它包含什么;但是根据你的错误判断它可能会给你的课程添加一些虚拟功能,即使你没有。尝试从班上删除这些东西。

或者,如果您确实需要Q_OBJECT位,请尝试从QObject继承:

class ConverterProxy: public QObject
{
    Q_OBJECT
    ...
};

有一些文档,暗示Q_OBJECT必须与QObject的继承一起使用:http://developer.blackberry.com/native/reference/cascades/moc.html

答案 1 :(得分:1)

在析构函数中不要delete pthis。你的物品已被摧毁。