久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Qt 出現(xiàn)“undefined reference to `vtable for”原因總結(jié)

 zengxiaowu2005 2010-09-13
  • Qt 出現(xiàn)“undefined reference to `vtable for”原因總結(jié);

    由于Qt本身實(shí)現(xiàn)的機(jī)制所限,,我們?cè)谑褂肣t制作某些軟件程式的時(shí)候,,會(huì)遇見各種各樣這樣那樣的問題,,而且非常多是非常難,或根本未找到原因的,,即使解決了問題,,如果有人問你為什么,你只能回答--不知道;
    今天我在這里列舉的問題也是再編寫Qt程式時(shí),,總是遇見的問題,,問題普遍,而答案卻不唯一,,解釋這一個(gè)問題的說法非常多,,往往只適合某一種情況,因?yàn)檫@個(gè) 錯(cuò)誤太籠統(tǒng)了,,他就是-- “undefined reference to `vtable for”可能你看著非常熟悉,,似乎在c++程式中也遇見過這個(gè)問題,你說對(duì)了,,有時(shí)候這個(gè)錯(cuò)誤,,不只是qt的原因,更有你的c++程式的原因,;
    下面搜集了網(wǎng)上的一些出現(xiàn)的現(xiàn)象,,對(duì)應(yīng)解決方法,原因,,基本上我都驗(yàn)證過,,收錄于此,以做備份,;
    一:
    預(yù)編譯器打開宏Q_OBJECT,,聲明若干個(gè)由moc處理(implement)的成員函數(shù)。如果得到類似于“undefined reference to vtable for LcdNumber”的編譯錯(cuò)誤(if you get compiler errors along the lines of "undefined reference to vtable for LcdNumber"),,你可能是忘記了執(zhí)行moc,,或忘記了將moc輸出加入到link命令里。
    某一個(gè)類中如果加入Q_OBJECT后,則link時(shí)提示:undefined reference to vtable for "xxx::xxx".刪掉他則沒有所有問題.
    解決:嘗試(1):把所有的obj文件和uic文件刪除,重新編譯.仍然失敗.
    去trolltech的mail lists找到原因: 因?yàn)閝make生成Makefile的時(shí)候,這個(gè)類的頭文件中并沒有Q_OBJECT,所以在相應(yīng)的Makefile里面并沒有用moc xxx.h命令,最終導(dǎo)致鏈接失敗.重新運(yùn)行qmake,問題解決.
    在查找解決方法的時(shí)候,附帶發(fā)現(xiàn)一點(diǎn):
    qmake 不會(huì)處理.cpp文件里的Q_OBJECT,所以,如果在.cpp文件中有他的話,也會(huì)產(chǎn)生undefined reference to vtable for "xxx::xxx". 這時(shí),需要先用moc xxxx.cpp生成相應(yīng)的moc文件,再包含到.cpp里面去,才能解決這個(gè)問題.
    這里能發(fā)現(xiàn)問題的出現(xiàn)是因?yàn)闆]有moc生成相應(yīng)的moc文件,,之后連接就出問題,。
    我找了好多源碼之類的問題,就是沒有找pro的錯(cuò)誤,,后來想到qt中moc我們是有make做的
    qt的make編譯是根據(jù)Makefile來的,,而Makefile是由pro文件來的。這才想到了找pro文件的錯(cuò)誤,。
    from: http://www./u/16292/showart_136087.html
    二:
    undefined reference to vtable for "xxx::xxx"
    今天碰到了這個(gè)問題,,終于被我google到了:
    http://www./opera/showart.php?blogid=8650&id=49526
    原 因:qmake不會(huì)處理.cpp文件里的Q_OBJECT,所以,如果在.cpp文件中有他的話,也會(huì)產(chǎn)生undefined reference to vtable for "xxx::xxx". 這時(shí),需要先用moc xxxx.cpp生成相應(yīng)的moc文件,再包含到.cpp里面去,才能解決這個(gè)問題.
    其他:
    1.問題: QGLViewer中的函數(shù)不能正常link.解決: 翻看其原始碼,發(fā)現(xiàn)是因?yàn)閺脑创a安裝libQGLViewer時(shí),編譯用了Qt 3,而我的程式中用Qt4 編譯.所以必須重新用Qt4編譯.不過,更改QTDIR 環(huán)境變量為Qt4后,重新編譯的話,qmake生成makefile時(shí)就提示出錯(cuò).進(jìn)一步發(fā)現(xiàn),是因?yàn)殡m然設(shè)了QTDIR為Qt4,頭文件和庫文件都會(huì)使 用Qt4,不過moc,uic等都是用的qt3版的,再把PATH環(huán)境變量改動(dòng)后,一切ok.
    2.問題:某一個(gè)類中如果加入Q_OBJECT后, 則link時(shí)提示:undefined reference to vtable for "xxx::xxx".刪掉他則沒有所有問題.解決:嘗試(1):把所有的obj文件和uic文件刪除,重新編譯.仍然失敗.去trolltech的 mail lists找到原因: 因?yàn)閝make生成Makefile的時(shí)候,這個(gè)類的頭文件中并沒有Q_OBJECT,所以在相應(yīng)的Makefile里面并沒有用moc xxx.h命令,最終導(dǎo)致鏈接失敗.重新運(yùn)行qmake,問題解決.在查找解決方法的時(shí)候,附帶發(fā)現(xiàn)一點(diǎn):qmake 不會(huì)處理.cpp文件里的Q_OBJECT,所以,如果在.cpp文件中有他的話,也會(huì)產(chǎn)生undefined reference to vtable for "xxx::xxx". 這時(shí),需要先用moc xxxx.cpp生成相應(yīng)的moc文件,再包含到.cpp里面去,才能解決這個(gè)問題.
    3. 看Qt的reference發(fā)現(xiàn): 能connect(pObjA, SIGNAL(someSignalA()),pObjB,SIGNAL(someSignalB()));這樣pObjA發(fā)出的someSingalA 會(huì)導(dǎo)致pObjB發(fā)出someSignalB,從而形成信號(hào)接力.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多