Я пытаюсь интегрировать PhysX NVIDIA в свою кодовую базу Linux. В некоторых из своих файлов заголовков, он определяет следующие перечислений:Конфликт, вызванный #define макросом и перечислением с использованием того же имени
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 #defines как 'None' и 'Успех'. Я подтвердил, что это проблема, поскольку, если я #undef как «Нет», так и «Успех», у меня больше нет ошибок. Однако это, очевидно, не является желательной вещью.
Мой вопрос: Как разработчик, который должен использовать оба этих заголовка, каков правильный курс действий для меня? Должен ли я сообщать об этом NVIDIA в качестве ошибки и ждать исправления или есть что-то, что я могу сделать сам, чтобы решить проблему (помимо #undef)?
Спасибо за ваше время!
С одной стороны, #define имена должны быть во всех шапках. Это обычно устраняет эти проблемы. – NathanOliver
@NathanOliver К сожалению, эти макросы определены в системных заголовочных файлах, которые не могут (и не должны) редактироваться. –
У вас нет выбора, кроме как использовать трюк '# undef', или переименовать значения перечислений, или не включать заголовочные файлы X11 в те же файлы, где используются ваши перечисления. –