15

アプリケーションをビルドすると、次のリンカー エラーが表示されます。

HIMyClass.obj:: エラー: 未解決の外部シンボル "パブリック: 仮想構造体 QMetaObject const * __thiscall CHIMyClass::metaObject(void)const " (?metaObject@CHIMyClass@@UBEPBUQMetaObject@@XZ) ファイルが見つかりません: HIMyClass.obj

HIMyClass.obj:: エラー: 未解決の外部シンボル "public: virtual void * __thiscall CHIMyClass::qt_metacast(char const *)" (?qt_metacast@CHIMyClass@@UAEPAXPBD@Z) ファイルが見つかりません: HIMyClass.obj

HIMyClass.obj:: エラー: 未解決の外部シンボル "public: virtual int __thiscall CHIMyClass::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@CHIMyClass@@UAEHW4Call@QMetaObject@@HPAPAX@Z)ファイルが見つかりません: HIMyClass.obj

私のクラス宣言は次のようなものです

class CHIMyClass:public QDialog
{
   Q_OBJECT

   ....

};

Q_OBJECT にコメントすると、リンカ エラーが発生します (明らかに、シグナルとスロットを使用できません)。Qt Creator を IDE として使用し、Qt 4.5.3 を使用しています。Rebuild Allを指定すると、 QMakeが呼び出されることは間違いありません。moc_* ファイルの生成に問題があると思います。Windows XP と cl をコンパイラとして使用しています。

このリンカ エラーの背後にある理由は何ですか?

4

11 に答える 11

30

このようなエラーは通常、クラスのヘッダーが pro ファイルの "HEADERS" 変数に追加されていないことを意味します (メタ オブジェクト コンパイラは、この変数にリストされているヘッダーに対してのみ moc_ ファイルを生成します)。.pro ファイルを変更したら、忘れずに qmake を実行してください。

于 2010-07-16T12:31:45.567 に答える
13

同様の問題があり、andref のフィードバックを使用して解決されました。QT Creator 内では、次のことを行うだけです。

  1. すべてビルド/クリーン
  2. qmakeをビルド/実行
  3. ビルド/実行
于 2011-02-11T08:51:01.643 に答える
1

MakeFile.debugファイルをチェックインしますが、HIMyClass存在しない可能性があります。

名前を変更MakeFile.debugし、プロジェクトをクリーンアップしてすべて再構築すると、コンパイルされます。

于 2010-08-18T22:25:44.207 に答える
1

私は同じ問題を抱えていましたが、私の場合はきれいにするのに十分ではありませんでした->ビルド。そのため、ビルド プロセスで作成されたすべてのファイル (Mekefiles、cpp の ui descriptionns、およびビルド プロセスによって作成された一般的なディレクトリ全体) を手動で削除する必要があり、その後ビルドが成功しました。

于 2012-05-23T12:25:59.800 に答える
0

私のosxボックスでは、これはmoc*ファイルが見つからないことが原因でした。utf-8でエンコードされた.proファイルからBOMを削除することで、これを修正しました。qtでバグを報告します。

ゴーグル検索のエラー...注:vtableがない場合は、通常、最初の非インライン仮想メンバー関数に定義がないことを意味します。

「vtableforMainWindow」、参照元:

 MainWindow::MainWindow(QWidget*)in mainwindow.o
于 2012-08-26T18:08:07.063 に答える
0

必要なQt構成オプションがプロファイルに存在することを確認します(QT += core gui少なくとも。ビルドディレクトリでビルド/作成されたものをすべて手動で削除してみてください。moc何らかの理由で実行に失敗することがあります。

mocコマンドを自分で実行して、何が出力されるかを確認することもできます(コマンドラインは、QtCreatorの[出力のコンパイル]タブにあります。

更新:この 関連する問題は、コンパイル時にQT_DLLを定義しないことを示唆しているようです。新しくて新しいシンプルなQtCreatorプロジェクト(たとえば、メインウィンドウをサブクラス化するウィジェットを使用)を試してみてください。Q_OBJECTヘッダーが自動的に含まれ、.proファイルとコンパイラ出力を比較してみてください。

于 2010-07-16T11:52:55.300 に答える
0

この問題がありました。.cpp ファイルにスロットの実装の記述があるかどうかを確認します。

于 2014-08-04T13:38:04.620 に答える
0

このエラーの別の考えられる原因と解決策を見つけました

このエラーは、.h ファイルでスロットを宣言したが、実装でその本体を定義していない場合にも発生します。

于 2014-06-05T07:46:08.060 に答える
0

@chalup と @ierax からの回答が役に立ちました。qmakeを有効にするには、Qtクリエーターを閉じて再度開く必要がありました。次の手順に従いました。 1. クラス定義をヘッダー ファイルに移動しました。2. ヘッダー ファイルをプロジェクトに追加し、.pro ファイルの HEADERS += \ list に対してリストされていることを確認しました。3. すべてクリーン 4. QtCreator を閉じます (Windows 10 の場合) 5. プロジェクト ディレクトリから Makefile を削除します 6. QtCreator を開いてプロジェクトを開きます。7. makefile が確実に生成されるようにするための Qmake。8. リビルドオール

これらの手順は、この問題を解決するのに役立ちました.1時間以上、他のさまざまな回答や方法で苦労しました. qmake を実行する前に、必ず makefile を削除して QtCreator を閉じてください (少なくとも Windows 10 に該当します)。

于 2016-06-16T03:28:17.907 に答える