0

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

4

3 回答 3

2

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

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

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

于 2011-08-24T21:10:20.063 回答
0

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

于 2011-08-24T21:16:17.240 回答
0

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

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

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

基本上,您正在使用一个包含文件,该文件将名称 DBTYPE 用于其他目的。您可以跟踪包含文件,确定您是否确实需要该其他文件,然后,如果不需要,请找出如何避免加载它----或者您可以给您的 DBTYPE 一个不同的名称。(受到推崇的)

于 2011-08-24T21:22:28.830 回答