1. 程式人生 > >Qt 編譯出錯:undefined reference to vtable XXX

Qt 編譯出錯:undefined reference to vtable XXX

 

在Qt編譯的過程中,程序會出現 error: undefined reference to `vtable for 類名'的問題,對於不經常使用QT的人來說甚是頭疼,其實這類問題發生的主要原因在於,一般我們定義了一個類以後,如果他是繼承了其他類的話

就比如說我們用MyBarView繼承自QGraphicsView,由於QGraphicsView中存在虛擬函式,而對於繼承關係來說,子類和父類使用同一個虛擬函式表,即我們使用初始化MyBarView類時候,會去檢視父類的虛擬函式表(其實就是自己的),虛擬函式表實際上就是函式地址表,這個表內的地址以一定函式名為規則進行命名,當然這就是和編譯器編譯原理有關係了。

所以,當我們定義好這個類的時候,他的虛擬函式表也就固定了,那麼又為什麼會出現上面undefined reference to vtable XXX問題呢,實際上有很多原因,比如這個時候對MyBarView這個類重新命名,例如定義為QMyBarView時就會出現上面de 問題,主要是因為虛擬函式表還保留了上次的函式地址,所以這個時候需要重新構建,執行qmake就好了。你就會發現編譯通過了