• 4487阅读
  • 1回复

解决Qt “undefined reference to `vtable for xxx'”的问题 [复制链接]

上一主题 下一主题
离线0708yc
 
只看楼主 倒序阅读 楼主  发表于: 2009-07-05
首先我们来看一下具体的一个问题:
#include<QtGui>
class myWidget : public QWidget
{
    public:
    myWidget();
    ~myWidget();
    virtual void mousePressEvent(QMouseEvent *e);
    private:
    bool m_isfullscreen;
};
myWidget::myWidget(): QWidget();
{
    m_isfullscreen = false;
}
void myWidget::mousePressEvent(QMouseEvent *e)
{
    if(m_isfullscreen){
        this->showNormal();
        m_isfullscreen = false;
    }
    else{
        this->showFullScreen();
        m_isfullscreen = true;
    }
}
int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    app.applicationName();
    QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
    myWidget* pWidget = new myWidget;
    QLabel label(pWidget);
    label.setText(QObject::tr("同一个世界,同一个梦想"));
    pWidget->show();
    return app.exec();
}
大家编译的时候总是提示“undefined reference to `vtable for myWidget'”的错误
网上对这个问题说得五花八门的,文件没有分开的,有说是Q_OBJECT的问题
等等,反正回答是五花八门。其实主要问题在于大家可能习惯了在VC下工作老是
不写析构函数的实现(VC已经帮我们把这个做好了,即使它没有帮你写它也能发现
这个问题,而不是傻不拉几地告诉你“undefined reference to `vtable for myWidget'”)
在VC下编译肯定能通过,没问题,但是到了Qt的编译器Qmake下就行不通了,
你必须得写出析构函数的实现来。
myWidget::~myWidget()
{
}
否则怎么编译也通不过的。
所以大家在从一个开发环境到另一个开发环境的时候不要想当然,毕竟Microsoft和
TrollTeck的想法不一样的,呵呵。
[ 此帖被0708yc在2009-07-05 16:06重新编辑 ]
离线20044454
只看该作者 1楼 发表于: 2009-07-05
在 .h 文件中 public 上一行加 Q_OBJECT
让我做一个Qt的大牛!!!!
快速回复
限100 字节
 
上一个 下一个