Я пытаюсь интегрировать 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)?
Спасибо за ваше время!
Самый разумный путь действий состоит в том, чтобы разделить реализации таким образом, чтобы в вашем проекте вы не включали ОБА конфликтующие заголовки в один и тот же исходный файл. Один файл имеет дело с X, а другой — с PhysX, а затем ваше приложение связывает две реализации вместе.