VS2019升级后,C2365重新定义先前的定义是外部标头+ lib的“枚举器”

时间:2019-12-03 13:33:06

标签: c++ visual-studio

这与Redefinition and EnumeratorReusing 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的枚举,这就是原因。

我尝试了两种不同的“解决方案”,它们都可以工作,但它们都是黑客。

  1. 我在Windows标头行3828中向枚举添加了类,并对其进行了编译。虽然这只是一个本地解决方案
enum class PLACEHOLDER_STATES
  1. 更改我的外部头文件中的名称,我想我只会避免这样做,因为在其余代码中未使用枚举。
enum    PARA_STATE                  
{                                   
    PS_NDEF,                        
    PS__DEFAULT
};

如果我正确地看到ShObjIdl_core.h适用于COM,并且外部库使用COM,那么我将无法摆脱依赖关系。

有更好的解决方案吗?

0 个答案:

没有答案