VS2012 でプリコンパイル済みヘッダーを使用する Qt プロジェクトがあり (それが関連しているかどうかは不明)、コンパイルして正常に動作します。しかし、QtCreator で同じプロジェクトをコンパイルしようとすると、エラーが表示されます。まず第一に、両方のプロジェクトは互いに対応しており、以前は正しく構成されていました (コンパイルして正常に動作しました)。しかし、コードへの最新の変更の後、何かがうまくいきませんでした。
エラー:
pch.h:34: error:C2084: function 'void handleExceptionByShowingMessage(std::exception &)' already has a body
main.cpp:16: error:C3861: 'handleExceptionByShowingMessage': identifier not found
これらは、pch.h (インラインも) で定義された別の関数といくつかの cpp ファイルで 30 行以上続きます。しかし、すべてのエラーは類推的です。
からpch.h
:
inline void handleExceptionByShowingMessage(std::exception &e)
{
QMessageBox msgBox;
msgBox.setText(QString::fromUtf16((ushort*)e.what()));
msgBox.setStandardButtons(QMessageBox::Discard);
msgBox.setIcon(QMessageBox::Warning);
int ret = msgBox.exec();
}
cpp
通常の使用であるため、ファイルからの関数呼び出しは貼り付けません。すべてのcpp
ファイルがpch.h
正しく (コードの最初の行) 含まれており、私が言ったように、まったく同じコードとファイル構造が VS2012 で機能します (そのコンパイラは、QtCreator が実際に使用していると思います...)。
さらにコード/情報が必要な場合はお知らせください。
更新:
はい、すべてのヘッダーに#pragma once
. 興味深いことに、これら 2 つの関数定義をダミーのヘッダー ファイルに移動して に含めるとpch.h
、プロジェクトは正常にコンパイルされました。