Странная ошибка при попытке объявить enum в C ++ Visual Studio 2010 - PullRequest
0 голосов
/ 25 августа 2011

У меня странная проблема с компиляцией и старый проект C ++ Visual Studio 5 в Visual Studio 2010. Возникла ноющая ошибка компилятора, от которой я не могу избавиться, которая, по-видимому, связана с перечислением «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 \ менеджер печати - 1 \ core \ blib \ odbcbrowsegrid.h 29 1 npcnt

Так что, черт возьми, здесь происходит? Я проверил и перепроверил синтаксис. Это выглядит хорошо для меня. Я провел поиск по всему каталогу, чтобы узнать, есть ли другой экземпляр DBTYPE, и нет. Что мне не хватает? Если его действительно переопределяют, почему, черт возьми, он не говорит мне, где другие определения?

Ответы [ 3 ]

2 голосов
/ 25 августа 2011

Похоже, вы включили, возможно, косвенно, файл odbcbrowsegrid.h, и он содержит что-то с таким же именем, я бы поставил в строке 29.

Так что вам просто придется называть свой enum по-другому.

ПОСЛЕ ТОГО, КАК : Если только ... Ваш файл на самом деле odbcbrowsegrid.h. Тогда я сказал глупость.

0 голосов
/ 25 августа 2011

Чтобы получить эту конкретную ошибку, вам нужно сделать что-то вроде:

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

(определение DBTYPE как enum дважды приводит к другой ошибке).Это означает, что хотя встроенные средства защиты (#define ODBCBROWSERGRID_H и т. Д.) Являются хорошей идеей, они не решат эту проблему.

По сути, вы используете файл включения, который использует имя DBTYPE для некоторых другихцель.Вы можете отследить включаемый файл, выяснить, действительно ли вам нужен этот другой файл, а затем, если нет, выяснить, как избежать его загрузки ---- или вы можете просто дать вашему DBTYPE другое имя.(Рекомендуется)

0 голосов
/ 25 августа 2011

Вы где-нибудь используете OleDb? (или что-то, что включает его заголовки). Он определяет тип DBTYPE (в oledb.h). Это может вызвать конфликт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...