枚举与UNICODE定义冲突 我正在研究一个C++项目(VC++),其中选择了“使用Unicode字符集”。p>
这将设置UNICODE和_UNICODE。同时,包含的第三方.h文件恰好在枚举中包含“UNICODE”,这两个文件相互冲突枚举与UNICODE定义冲突 我正在研究一个C++项目(VC++),其中选择了“使用Unicode字符集”。p>,c++,C++,这将设置UNICODE和_UNICODE。同时,包含的第三方.h文件恰好在枚举中包含“UNICODE”,这两个文件相互冲突 enum Encoding { ... UNICODE = 17, // Teragram Unicode ... } IDE抱怨“error C2059:syntax error:“constant”,因为我要在枚举中使用的UNICODE被转换为数字1。有什么办法可以转义枚举名吗?如何解决此问题?您可以添加一条语句: #undef
enum Encoding {
...
UNICODE = 17, // Teragram Unicode
...
}
IDE抱怨“error C2059:syntax error:“constant”,因为我要在枚举中使用的UNICODE被转换为数字1。有什么办法可以转义枚举名吗?如何解决此问题?您可以添加一条语句:
#undef UNICODE
在枚举之前。这里的问题是UNICODE现在将是未定义的,因此例如,您的TCHAR将成为常规字符。对于枚举值来说,这是一个可怕的名称。为了避免这种情况,您必须在包含的顺序上做很多调整。撇开效率不谈,这是c/c++枚举的一个真正缺点 每次我面对这样的问题,我都会尝试以下两种解决方案:
由于
\u UNICODE
仍将是#define'd,如果\u UNICODE
是#define'd,则可以在枚举后立即定义UNICODE。我假设第三方库中的代码不能修改。无论如何,你的建议肯定会有帮助。你可以自由修改库的.h文件,因为你的代码必须编译它们。我同意你的观点。我认为,每当我们声明类、结构、枚举等时,我们都必须使用名称空间来解决这个问题,同时也要使用格式良好的代码。如果人们停止用大写字母命名那些不是预处理器宏的东西,问题就不会那么严重了。名称空间解决不了这个问题,由于UNICODE
是一个预编译器定义,因此不受名称空间的影响。如果未使用#unde
语句,则需要在枚举上添加前缀。