我在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实例,但没有。我错过了什么?如果它真的被重新定义,为什么它不会告诉我其他定义在哪里?
答案 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一个不同的名字。 (推荐)