我在 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
这些持续了 30 多行,在 pch.h 中定义了另一个函数(也是内联的)和更多的 cpp 文件。但是所有的错误都是类比的。
来自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
. 不过有趣的通知- 当我将这两个函数定义移动到一个虚拟头文件并将其包含在 中时pch.h
,项目编译得很好。