c++ - 尝试在 C++ Visual Studio 2010 中声明枚举时出现奇怪错误

标签 c++ c enums redefinition

我在 Visual Studio 2010 中编译旧的 C++ Visual Studio 5 项目时遇到一个奇怪的问题。有一个烦人的编译器错误我无法摆脱,它似乎与枚举“DBTYPE”有关。下面给出了 .h 文件的片段和一些额外的行,以防错误来自上面:

struct CBrowseField;
class CODBCBrowseDlg;

typedef CArray <CBrowseField*, CBrowseField*&> FLDNAMES;
typedef CArray <CString, LPCTSTR > COLNAMES;

enum DBTYPE
{                 //this bracket is where all 7 errors point to.
   DB_FOXPRO26,
   DB_OTHERS
};

我在编译时遇到了 7 个错误,它们都在说同样的事情,并且都指向相同的行号。错误如下:

错误 71 错误 C2371:“DBTYPE”:重新定义;不同的基本类型 d:\temp\npc\print manager - 1\core\blib\odbcbrowsegrid.h 29 1 npcnt

那么这里到底发生了什么。我检查并重新检查了语法。我觉得不错。我已经对整个目录进行了单词搜索,以查看是否有另一个 DBTYPE 实例,但没有。我错过了什么?如果它真的被重新定义了,为什么它不告诉我其他定义在哪里?

最佳答案

看起来你可能间接地包含了 odbcbrowsegrid.h 文件,它恰好包含同名的东西,我敢打赌在第 29 行。

所以你只需要以不同的方式调用你的枚举。

AFTERTHOUGHT:除非...您的文件实际上是 odbcbrowsegrid.h。那我就废话了。

关于c++ - 尝试在 C++ Visual Studio 2010 中声明枚举时出现奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7182277/

相关文章:

grails - grails中的枚举-将枚举值持久化到域类

c# - 枚举可以包含字符串吗?

c++ - 函数参数评估顺序与 Lambda 捕获评估顺序

c++ - 为什么我的 espeak-ng 程序什么也不说?

c - fork() 返回正数而不是零

c - 我是否要转换 malloc 的结果?

c - C 中二进制字符到十六进制的转换

c++ - 英特尔 C++ 编译器 (icpc 14.0) : "a derived class is not allowed here"

c++ - 没有任何 vbo 输入的顶点着色器输出

java - 如何使用枚举实现接口(interface),接口(interface)扩展 Comparable?