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 を列挙型として 2 回定義すると、別のエラーが発生します)。つまり、インクルード ガード (#define ODBCBROWSERGRID_H など) は良いアイデアですが、この問題は解決されません。

基本的に、DBTYPE という名前を別の目的で使用するインクルード ファイルを使用しています。インクルード ファイルを追跡し、その他のファイルが実際に必要かどうかを判断し、そうでない場合は、それをロードしないようにする方法を見つけます ---- または、DBTYPE に別の名前を付けることができます。(おすすめされた)

于 2011-08-24T21:22:28.830 に答える