- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个在 VS2012 中使用预编译 header (不确定是否相关)的 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 实际上使用...)。
如果您需要更多代码/信息,请告诉我。
更新:是的,所有 header 都有 #pragma once
。 有趣的通知 - 当我将这两个函数定义移动到一个虚拟头文件并将其包含在 pch.h
中时,项目编译正常。
最佳答案
#pragma once
仅防止包含该指令的文件被多次包含。您的预编译头文件 pch.h
会在加载预编译头文件时被包含,并在您的文件被编译时被第二次包含。 #pragma
指令将它们视为单独的文件,因此在此上下文中不起作用。
pch.h
文件(或 stdafx.h
)是一种优化,理想情况下不应包含源代码,而应仅包含 #includes
其他头文件。这样,多次包含它就不是问题了。
另一种解决方案是使用包含防护 (#ifndef PCH #define PCH #endif
),这将防止文件被多次包含。
关于c++ - 'identifier' 已有正文但未找到标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16913752/
我创建的 MySQL 备份文件是使用 --all-databases 转储的,并且其中包含“CREATE DATABASE IF NOT EXISTS”语句。 我现在有一个全新的 MySQL 实例,我
paragraph
添加到 div 中,但如果该 div 已有 2 个段落,则创建一个新 div我有一个 div .content,里面有两个 div (.content-1, .content-2)。 在 .content 内的 div 中,我只想最多有两个段落。 因此,当我单击“添加”按钮时
我是一名优秀的程序员,十分优秀!