我的头文件包含以下内容:
#define PAUSE system("pause");
typedef unsigned char uint8;
static const double PI = 3.14159265358979323846;
static const double oneDegInRads = PI / 180;
我一直将这个头文件包含在所有地方的许多.cpp文件中,没有任何问题。由于我想清理我的代码,我正在修复警告,主要是一些小问题,如“抛出双重浮动,可能丢失数据”或“无符号签名不匹配”警告。所以我在设置中打开了“将编译器警告视为错误”,因此通过使用它我可以严格评估我的代码有多糟糕并相应地修复它。打开它后,我的解决方案将无法构建,并显示错误:
Code Description File
C2220 "Warning treated as error - no 'object' file generated myDefinitions.h
我知道为什么会发生这种情况,因为我将具体设置改为开启。我尝试用以下方法抑制和禁用此警告:
#pragma warning (disable : 2220)
我也尝试过遵循“每个标题规则的一个CPP”,制作一个“myDefinitions.cpp”并且只包含标题而没有其他内容,但错误消息仍然出现。
所以我的问题是:
1:我可以拥有一个没有.cpp的头文件(不忽略警告)吗?
2:如果没有,我如何制作我的.cpp,因为我已经尝试但失败了?
3:您可以建议哪一个更好的解决方案,让您有一个页面,其中您经常使用的所有重要定义都是?我需要将它们包含在你想要的任何地方。
答案 0 :(得分:1)
Visual Studio正在尝试将myDefinitions.h头文件编译为目标文件。
它不应该那样做!只应将.cpp源文件转换为目标文件。
我猜你可能在某个时候将.cpp文件重命名为myDefinitions.h,而Visual Studio并不了解你想要更改其文件"键入"。
尝试删除myDefinitions.h文件,然后创建一个新的myDefinitions.h文件,从新文件对话框中选择正确的文件类型。然后,您可以将旧内容放入新标题中。
答案 1 :(得分:1)
好的,谢谢Ton Plooij和Johan Boule。发生这种情况的原因是在我的头文件中有隐式类型转换,例如:
C4305: 'initializing': truncation from 'double' to 'float'
在错误标签中,它只说:
"Warning treated as error - no 'object' file generated
这让我相信它正在寻找一个CPP文件,这很奇怪,因为头文件没有被制作成目标文件。我不知道的是我能找到"警告"触发了"错误"点击"警告"标签。它确切地显示了哪些"警告"做了'#34;错误"出现。
再次感谢您的帮助。
答案 2 :(得分:0)
由于存在警告,因此发生C2220错误。由于存在警告,因此不会生成任何对象或可执行文件。您无法禁用此C2220,它是您使用/ WX选项启用的。因此,要么修复所有警告,要么禁用/ WX(将所有警告视为错误)选项。