2016-09-14 3 views
-1

Я использую Unreal Engine 4 с некоторыми внешними DLL-библиотеками. Я столкнулся с проблемой, где «PI» определен в базовом коде нереальным двигателя, как «3.141592 ...», как это:#define конфликт с переменной в .dll файл заголовка

#define PI     (3.1415926535897932f) 

Однако в заголовочном файле, поставляемом вместе с DLL-библиотеки, я использую " ПИ»является именем защищенной переменной-члена класса:

protected: 
    SomeDataType PI; 

Я не могу редактировать определить, поскольку он используется в основных файлах Unreal Engine. Я считаю, что я не могу редактировать заголовочный файл, так как он больше не будет соответствовать базовому .dll.

Есть ли хорошее решение для этого? Могу ли я определить «PI» локально или что-то еще?

+4

'#undef PI' может помочь локально. –

ответ

1

Это проблема с макросами, и поэтому современные программисты на С ++ стараются избегать их как можно больше.

Одним из решений является для вашего кода, чтобы не включать в Unreal заголовочный файл непосредственно, но сделать что-то вроде:

// my_unreal.h 
#include "unreal.h" 
#undef PI 

, а затем в остальной части кода только делать #include "my_unreal.h", а не фактическое нереальна заголовка , Так что макрос исчезнет к тому времени, когда произойдет какой-либо другой код.