Конфликт вызван #define макросом и перечислением с тем же именем

Я пытаюсь интегрировать PhysX от NVIDIA в мою кодовую базу Linux. В некоторых заголовочных файлах он определяет следующие перечисления:

physxvisualdebuggersdk / PvdErrorCodes.h

struct PvdErrorType
{
enum Enum
{
Success = 0,
NetworkError,
ArgumentError,
InternalProblem
};
};

physxprofilesdk / PxProfileCompileTimeEventFilter.h:

struct EventPriorities
{
enum Enum
{
None,       // the filter setting to kill all events
Coarse,
Medium,
Detail,
Never       // the priority to set for an event if it should never fire.
};
};

Что приводит к следующим ошибкам компиляции:

/usr/local/include/PhysX3/physxvisualdebuggersdk/PvdErrorCodes.h:36:4: error: expected identifier before numeric constant
Success = 0,
^
/usr/local/include/PhysX3/physxvisualdebuggersdk/PvdErrorCodes.h:36:4: error: expected ‘}’ before numeric constant
/usr/local/include/PhysX3/physxvisualdebuggersdk/PvdErrorCodes.h:36:4: error: expected unqualified-id before numeric constant

а также

/usr/local/include/PhysX3/physxprofilesdk/PxProfileCompileTimeEventFilter.h:46:4: error: expected identifier before numeric constant
None,  // the filter setting to kill all events
^
/usr/local/include/PhysX3/physxprofilesdk/PxProfileCompileTimeEventFilter.h:46:4: error: expected ‘}’ before numeric constant
/usr/local/include/PhysX3/physxprofilesdk/PxProfileCompileTimeEventFilter.h:46:4: error: expected unqualified-id before numeric constant

Я решил, что это потому, что X11 / X.h # определяет оба «Нет» и «Успех». Я подтвердил, что это проблема, потому что, если я #undef и «Нет» и «Успех», у меня больше не будет ошибок. Однако это, очевидно, нежелательно.

Мой вопрос: как разработчик, который должен использовать оба этих заголовка, как мне поступить правильно? Должен ли я сообщить об этом в NVIDIA как об ошибке и дождаться исправления или я могу что-то сделать самостоятельно, чтобы решить проблему (кроме #undef)?

Спасибо за ваше время!

3

Решение

Самый разумный путь действий состоит в том, чтобы разделить реализации таким образом, чтобы в вашем проекте вы не включали ОБА конфликтующие заголовки в один и тот же исходный файл. Один файл имеет дело с X, а другой — с PhysX, а затем ваше приложение связывает две реализации вместе.

1

Другие решения


По вопросам рекламы [email protected]