как игнорировать определения (VS2008) - PullRequest
0 голосов
/ 25 июня 2009

У меня есть некоторый исходный код, который я хочу скомпилировать с VS2008, но есть много ошибок, которые я должен исправить. Теперь есть некоторые перечисления, такие как:

enum
{
BACKGROUND  = 0x00000001,
WEAPON      = 0x00000002,
TRANSPARENT = 0x00000004
}

Проблема в том, что ПРОЗРАЧНЫЙ определяется как:

#define TRANSPARENT         1

в WinGDI.h

Это приведет к ошибке компиляции, например:

error C2143: syntax error : missing '}' before 'constant'

Можно ли исправить эту ошибку, не переименовывая поле в enum и не удаляя WinGDI.h из включений (я не знаю, где он включен ..)

Ответы [ 2 ]

2 голосов
/ 25 июня 2009

Вы можете использовать

#undef TRANSPARENT

, но это может привести к ошибкам в другом месте, если впоследствии используется WinGDI TRANSPARENT. (Грязный) обходной путь может быть:

#ifdef TRANSPARENT
#define _TRANSPARENT TRANSPARENT
#undef TRANSPARENT
#endif

и после вашего кода:

#ifdef _TRANSPARENT
#define TRANSPARENT _TRANSPARENT
#endif
2 голосов
/ 25 июня 2009

Если вы не используете значение TRANSPARENT из WinGDI.h, вы можете просто добавить:

#undef TRANSPARENT

перед перечислением (это только обходной путь, лучше переименовать ПРОЗРАЧНОЕ в перечислении).

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