gpt4 book ai didi

c++ - 奇怪的错误 C2065 : 'ERROR' : undeclared identifier

转载 作者:可可西里 更新时间:2023-11-01 10:06:56 25 4
gpt4 key购买 nike

作为一个更大的项目(Mozilla Firefox 的 ff activex 插件)的一部分,有这个代码片段:

if (CombineRgn(hrgnClip, hrgnClip, hRGN, RGN_AND) != ERROR)
{
::InvalidateRgn(m_hWndParent, hrgnClip, fErase);
}

当我在 VS2012 中构建时,我得到“Error C2065: 'ERROR' : undeclared identifier”ERROR 在 wingdi.h 中定义如下:

...
/* Region Flags */
#define ERROR 0 // it wont build when this macro is used
#define NULLREGION 1 // it builds when this macro is used
#define SIMPLEREGION 2
#define COMPLEXREGION 3
#define RGN_ERROR ERROR
...

奇怪的是,如果我在 if 语句,代码构建正常。当我使用 ERROR 时,代码不会生成。上面定义的 ERROR 宏是否可能被某些关键字或另一个宏或 Visual Studio 的某些类似内容掩盖?

最佳答案

这里的问题是ERROR实际上出现在编译错误信息中。这不应该发生,预处理器应该用 0 替换它。

所以某处在您#included windows.h 之后的.h 文件中,一些程序员采取了解决宏名称冲突问题的10 秒捷径并写下了以下内容:

  #undef ERROR

您需要找到该行并将其删除。这可能很困难,而且容易给您带来维护上的麻烦,因为这是您不拥有的文件,并且将来很可能会更新,迫使您一遍又一遍地进行更改。另一种方法是自己重新定义它:

#define MYGDIERROR 0
...
if (CombineRgn(hrgnClip, hrgnClip, hRGN, RGN_AND) != MYGDIERROR)
//etc...

这仍然会给您带来维护问题,并且需要您打赌 CombineRgn() 的返回值定义永远不会改变。这是一个非常安全的赌注,GDI 是一成不变的。

关于c++ - 奇怪的错误 C2065 : 'ERROR' : undeclared identifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16851696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com