Это происходит потому, что оба включения происходят в одном модуле компиляции. Вы можете обойти эту проблему, переместив включение одного из перечислений в отдельную единицу компиляции, за счет того, что значения этого перечислителя не являются константами времени компиляции (фактически они становятся глобальными переменными).
В pp_workaround.h:
extern const int PAYPAL_ENV_LIVE;
In pp_workaround.m:
#import "PayPal.h" // I'm completely making up the name of PayPal's header
// The import of "AuthNet.h" is missing
const int PAYPAL_ENV_LIVE = ENV_LIVE;
Теперь вы можете включить "pp_workaround.h"
вместо "PayPal.h"
и использовать PAYPAL_ENV_LIVE
вместо ENV_LIVE
. Не все будет работать одинаково, но ошибка времени компиляции должна исчезнуть.
РЕДАКТИРОВАТЬ Если ваш код позволяет импортировать конфликтующие заголовки только в ваш файл .m, вы можете исправить проблему (вместо того, чтобы обойти ее), поместив код подключения в дополнительный уровень абстракции вашего собственный, как это:
В paypal_init.h:
extern void connect_paypal();
В paypal_init.m:
#import "PayPal.h"
#import "paypal_init.h"
void connect_paypal() {
// Use ENV_LIVE from PayPal.h here
}
в authnet_init.h:
extern void connect_authnet();
в authnet_init.m:
#import "AuthNet.h"
#import "authnet_init.h"
void connect_authnet() {
// Use ENV_LIVE from AuthNet.h here
}
В вашем основном файле:
#import "authnet_init.h"
#import "paypal_init.h"
void init() {
connect_paypal();
connect_authnet();
}