我的头文件包含以下内容:
#define PAUSE system("pause");
typedef unsigned char uint8;
static const double PI = 3.14159265358979323846;
static const double oneDegInRads = PI / 180;
我一直在将这个头文件包含到许多 .cpp 文件中,而没有出现任何问题。当我想清理我的代码时,我正在修复警告,主要是一些小东西,比如“将 double 转换为 float ,可能丢失数据”,或“无符号到有符号不匹配”警告。所以我在设置中打开了“将编译器警告视为错误”,因此通过使用它我可以严格评估我的代码有多糟糕并相应地修复它。打开它后,我的解决方案将无法构建,并显示错误:
Code Description File
C2220 "Warning treated as error - no 'object' file generated myDefinitions.h
我知道为什么会这样,因为我打开了那个特定的设置。我尝试通过以下方式抑制和禁用此警告:
#pragma warning (disable : 2220)
我也尝试过遵循“每个 header 规则一个 CPP”,制作一个“myDefinitions.cpp”并仅包含 header 而不包含其他任何内容,但错误消息仍然出现。
所以我的问题是:
1:我可以有一个没有 .cpp 的头文件吗(不忽略警告)?
2:如果没有,我该如何制作我的 .cpp,因为我已经尝试过但失败了?
3:您可以建议有什么更好的解决方案,让一个页面包含您经常使用的所有重要定义?我需要能够将它们包含在您想要的任何位置。
最佳答案
Visual Studio 正在尝试将您的 myDefinitions.h 头文件编译为目标文件。
它不应该那样做!只有 .cpp 源文件应该被翻译成目标文件。
我猜你可能在某个时候将 .cpp 文件重命名为 myDefinitions.h,而 Visual Studio 不理解你想要更改其文件“类型”。
尝试删除您的 myDefinitions.h 文件,然后创建一个新的 myDefinitions.h 文件,从新文件对话框中选择正确的文件类型。然后,您可以将旧内容放入新标题中。
关于c++ - 如何获得没有 cpp 的头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36958460/