这与Redefinition and Enumerator和Reusing enum values in separate enum types以及类似问题有关。
我有一个VS2013项目,该文件使用来自外部源的标头和lib,无法从中获取新版本。
当我升级到v142 / VS2019并进行编译时,从外部标头中出现错误“ C2365'PS_DEFAULT':重新定义;先前的定义为'enumerator'“。
除了标题之外,我在代码的其他任何地方都找不到枚举PARA_STATE或PS_DEFAULT。
标头代码如下:
#ifndef GLX_DBMS_H
#define GLX_DBMS_H
...
enum PARA_STATE
{
PS_NDEF,
PS_DEFAULT,
PS_DEFAULT_LONG,
PS_PARAM,
PS_PARAM_LONG,
PS_CONNECTED
};
struct Para
{
DATA_TYPE paraType;
WORD paraTypeLength;
char paraName[SIZEPARANAME];
PARA_STATE strucType;
}
struct ParaV8
{
DATA_TYPE paraType;
WORD paraTypeLength;
char paraName[SIZEPARANAME];
PARA_STATE strucType;
}
...
#endif
2013年至2019年之间发生了什么变化,因此不再有效?
在从外部获取新版本之外,是否有办法解决此问题?
更新
我按照建议的方式查看了Visual Studio中的消息,ShObjIdl_core.h中的3835行有一个带有PS_DEFAULT的枚举,这就是原因。
我尝试了两种不同的“解决方案”,它们都可以工作,但它们都是黑客。
enum class PLACEHOLDER_STATES
enum PARA_STATE
{
PS_NDEF,
PS__DEFAULT
};
如果我正确地看到ShObjIdl_core.h适用于COM,并且外部库使用COM,那么我将无法摆脱依赖关系。
有更好的解决方案吗?