如何拥有一个没有 cpp 文件的 header 文件?

How to have a header file without a cpp one?

我的 header 文件包含以下内容:

#define PAUSE system("pause");
typedef unsigned char uint8;
static const double PI = 3.14159265358979323846;
static const double oneDegInRads = PI / 180;

我已经将这个 header 文件包含在许多 .cpp 文件中,没有出现任何问题。当我想清理我的代码时,我正在修复警告,主要是像 "cast double to float, possible loss of data" 或 "unsigned to signed mismatch" 警告这样的小东西。所以我在设置中打开了 "Treat compiler warnings as errors",所以通过使用它我可以严格评估我的代码有多糟糕并相应地修复它。打开它后,我的解决方案将无法构建,并显示错误:

Code                         Description                                  File   
C2220     "Warning treated as error - no 'object' file generated     myDefinitions.h

我知道为什么会这样,因为我打开了那个特定的设置。我已尝试通过以下方式抑制和禁用此警告:

#pragma warning (disable : 2220)

我也试过按照 "One CPP for each header rule",制作一个 "myDefinitions.cpp" 并且只包含 header 而没有其他内容,但错误消息仍然出现。

所以我的问题是:

1: 我可以有一个没有 .cpp 文件的 header 文件吗(不忽略警告)?

2:如果没有,我该如何制作我的 .cpp,因为我已经尝试过但失败了?

3:您可以建议有什么更好的解决方案,让一个页面包含您经常使用的所有重要定义?我需要能够将它们包含在您想要的任何位置。

出现C2220错误是因为有警告。由于存在警告,因此不会生成任何对象或可执行文件。您不能禁用此 C2220,它是您使用 /WX 选项启用的。因此,要么修复所有警告,要么禁用 /WX(将所有警告视为错误)选项。

Visual Studio 正在尝试将您的 myDefinitions.h header 文件编译为 object 文件。

不应该那样做!只有 .cpp 源文件应翻译成 object 个文件。

我猜你可能在某个时候将一个 .cpp 文件重命名为 myDefinitions.h,而 Visual Studio 不明白你想更改它的文件 "type".

尝试删除您的 myDefinitions.h 文件,然后创建一个新的 myDefinitions.h 文件,从新文件对话框中选择正确的文件类型。然后,您可以将旧内容放入新 header.

好的,谢谢 Ton Plooij 和 Johan Boule。发生这种情况的原因是在我的头文件中有隐式类型转换,例如:

C4305: 'initializing': truncation from 'double' to 'float'

在错误选项卡中它只说:

"Warning treated as error - no 'object' file generated

这让我相信它正在寻找一个 CPP 文件,这很奇怪,因为头文件没有制作成目标文件。我不知道的是,我可以通过单击 "Warnings" 选项卡找到触发 "Error" 消息的 "Warning"。它准确地显示了 "Warnings" 使 "Error" 出现。

再次感谢您的帮助。