首頁 >後端開發 >C++ >為什麼我的 Qt 應用程式中出現「Q_OBJECT 連結錯誤:『對 vtable 的未定義引用』」?

為什麼我的 Qt 應用程式中出現「Q_OBJECT 連結錯誤:『對 vtable 的未定義引用』」?

Linda Hamilton
Linda Hamilton原創
2024-10-28 03:51:02345瀏覽

 Why Am I Getting a

Q_OBJECT 連結錯誤:'對vtable 的未定義引用'

考慮以下Qt 程式碼片段:

<code class="cpp">class T : public QObject, public QGraphicsItem
{
    Q_OBJECT

public:
    T() {}

    QRectF      boundingRect() const {return QRectF();}
    void        paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
                      QWidget *widget) {}
};

int main()
{
    T t;
    return 0;
}</code>

編譯此程式碼時,您可能會遇到連結器錯誤,例如:

undefined reference to `vtable for T'
undefined reference to `vtable for T'
...

解決方案:

當MOC 為您的類別產生的單元未包含在連結過程中時,通常會發生此錯誤。 MOC 單元包含有關該類別的元信息,包括其 Q_OBJECT 巨集。

可能的原因和修復:

  • 單獨的頭文件: 確保您的類別聲明位於單獨的頭文件中。建置系統可能不會掃描實作檔案來定位類別聲明。
  • MOC 產生: 驗證 MOC 單元是否已產生。再次執行 qmake 以強制 qmake 建立必要的 MOC 規則。如果使用 Qt Creator,請從專案上下文功能表中選擇「執行 qmake」。
  • Q_OBJECT 巨集: 確認您已在類別宣告中正確使用了 Q_OBJECT 巨集。它應該放在任何構造函數定義之前。
  • 繼承:如果此類以前不屬於Qt 元物件系統(例如,它沒有Q_OBJECT 巨集或從另一個類別繼承) ),重新運行qmake 或對專案檔案進行無關緊要的更改以觸發qmake 運行。

以上是為什麼我的 Qt 應用程式中出現「Q_OBJECT 連結錯誤:『對 vtable 的未定義引用』」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn