ADO ENUM 重定义问题

本文介绍了解决在预编译文件中包含ADO与MFC数据库类导致的类型重定义错误的方法。通过注释掉特定的MFC数据库类头文件,可以避免编译时出现的一系列错误。

#import "c://Program Files//Common Files//System//ADO//msado15.dll" /
 no_namespace rename("EOF", "adoEOF") rename("BOF","adoBOF")

加入则提示什么msado15.tlh(228) : error C2011: “LockTypeEnum”: “enum”类型重定义一大堆,

原来是预编译文件中有

#include <afxdao.h>   // MFC DAO 数据库类


注释掉此文件即可通关!

 

另外

#include <afxdb.h>   // MFC ODBC 数据库类

也没有用,注释掉

### 枚举类型的重新定义与扩展 在C++中,`enum` 是一种用于定义一组命名常量的数据类型。如果希望对现有的 `enum` 进行扩展或者重新定义,则需要遵循一定的规则和设计模式。 #### 使用作用域枚举(Scoped Enum) 从 C++11 开始引入了作用域枚举的概念,它通过指定基础数据类型以及限定符来增强安全性。这种方式可以防止不同枚举之间的值冲突,并且可以通过显式的转换来进行操作。 ```cpp enum class Color : uint8_t { RED, GREEN, BLUE }; ``` 上述代码定义了一个名为 `Color` 的作用域枚举,其底层类型为 `uint8_t`[^1]。 #### 扩展已有的枚举类型 由于标准的 `enum` 和作用域 `enum` 都不允许直接追加新的成员到已有定义上,因此通常采用以下几种方法: ##### 方法一:组合多个枚举类型 可以在更高层次的设计中将两个独立的枚举结合起来使用。例如: ```cpp enum PrimaryColors { PRIMARY_RED, PRIMARY_GREEN, PRIMARY_BLUE }; enum SecondaryColors { SECONDARY_YELLOW, SECONDARY_ORANGE, SECONDARY_PURPLE }; ``` 虽然这并不是严格意义上的“扩展”,但在逻辑上实现了功能上的扩充[^3]。 ##### 方法二:利用继承模拟扩展行为 尽管 C++ 中的 `enum` 不支持传统意义上的继承机制,但是可以通过嵌套结构体或其他封装技术间接达到目的。比如创建一个新的类或结构体包含原始枚举及其新增项: ```cpp struct ExtendedColors { enum Type { EXTENDED_RED = static_cast<int>(PrimaryColors::PRIMARY_RED), EXTENDED_GREEN = static_cast<int>(PrimaryColors::PRIMARY_GREEN), EXTENDED_BLUE = static_cast<int>(PrimaryColors::PRIMARY_BLUE), NEW_COLOR_PINK, // 新增颜色 NEW_COLOR_BROWN // 另一个新增颜色 }; }; ``` 这里需要注意的是手动映射旧有枚举值至新体系下的对应关系[^2]。 #### 注意事项 当涉及到跨文件共享这些自定义类型时,请务必遵守良好的编码实践原则,如避免不必要的全局状态暴露等问题描述中的第三条建议所提到的内容。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值