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

时间:2011-08-24 21:07:47

标签: c++ c enums redefinition

我在Visual Studio 2010中有一个奇怪的问题编译和旧的C ++ Visual Studio 5项目。有一个唠叨的编译器错误,我无法摆脱它似乎与枚举“DBTYPE”有关。下面给出了一个.h文件的snippit,其中包含一些额外的行,错误来自上面:

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实例,但没有。我错过了什么?如果它真的被重新定义,为什么它不会告诉我其他定义在哪里?

3 个答案:

答案 0 :(得分:2)

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

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

AFTERTHOUGHT :除非......您的文件实际上是odbcbrowsegrid.h。然后我说了一句废话。

答案 1 :(得分:0)

你在某处使用OleDb吗? (或包含其标题的内容)它定义了一个DBTYPE类型(在oledb.h中)。这可能会引发冲突。

答案 2 :(得分:0)

要获得该特定错误,您需要执行以下操作:

typedef int DBTYPE;
enum DBTYPE {DB_FOXPRO26, DB_OTHERS};

(将DBTYPE定义为枚举两次会产生不同的错误)。这意味着虽然包含警卫(#define ODBCBROWSERGRID_H等)是一个好主意,但它们不会解决这个问题。

基本上,您使用的是包含名称DBTYPE的包含文件用于其他目的。你可以追踪包含文件,弄清楚你是否真的需要那个其他文件,然后,如果没有,弄清楚如何避免加载它----或者你可以给你的DBTYPE一个不同的名字。 (推荐)