Q_OBJECT 使用時の「vtable への未定義の参照」エラー
リンカーが見つからない場合、エラー「vtable への未定義の参照」が発生しますQObject を継承し、Q_OBJECT マクロを宣言するクラスの仮想関数テーブル (vtable)。このエラーは、いくつかの理由で発生する可能性があります。
考えられる原因:
-
MOC ユニットの欠落: MOC (メタオブジェクト コンパイラー) QObject 関連の機能の実装を含む別個のユニット ファイルを生成します。 MOC によって生成されたユニットがリンク プロセスに含まれていることを確認してください。
-
実装ファイル内のクラス宣言: クラス宣言を実装ファイルではなく別のヘッダー ファイルに配置します。ビルド システムは、MOC 処理のために実装ファイルをスキャンしていない可能性があります。
-
Missing qmake Invocation: Qmake は、MOC に必要なビルド ルールを生成します。クラスが最初から Qt メタオブジェクト システムに属していない場合は、再度 qmake を実行してタイムスタンプを更新し、実行をトリガーします。
解決策:
この問題を解決するには、次の手順に従ってください:
- クラス宣言を別のヘッダー ファイルに移動します。
- Qt Creator のプロジェクト コンテキスト メニューから、または手動で「Run qmake」を実行します。プロジェクト ファイルのタイムスタンプを更新して qmake の呼び出しを強制します。
- 生成された MOC ユニットがリンク プロセスに含まれていることを確認します。
これらの対策により、「vtable への未定義の参照」エラーが解消されます。コードが正常にコンパイルされるようにします。
以上がQ_OBJECT を使用すると「vtable への未定義の参照」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。