2015-01-19 2 views
1

В моем проекте используется log4cpp и libnet, но есть проблема.typedef redefinition в библиотеке 3rdparty

В log4cpp, config-win32.h

typedef u_long in_addr_t 

Также в libnet, in_systm.h

typedef u_int32_t in_addr_t; 

Так как это исправить элегантно?

  • не изменяет исходные файлы библиотека
  • меньше работы

ответ

0

вы можете заменить in_addr_t с другим словом в log4cpp или libnet.

если in_addr_t не отображается много. вы можете переместить typedef…… на номер {} где вы используете in_addr_t. Область typedef - {}, если вы используете ее в блоке кода.

1

Вы можете избежать этого, используя работу вокруг, когда включая заголовки:

#define in_addr_t log4cpp_in_addr_t 
#include "config-win32.h" 
#undef in_addr_t 

#define in_addr_t libnet_in_addr_t 
#include "in_systm.h" 
#undef in_addr_t 

Затем в коде, используйте log4cpp_in_addr_t и libnet_in_addr_t вместо in_addr_t.

+0

Извините, я могу упростить ситуацию. Я включаю 'libnet.h' и' log4cpp' некоторый заголовок. Я не использую 'in_addr_t'. Я не уверен, что я сказал ясно. – qianchenglong

+1

Если вы не используете 'in_addr_t', вам не нужно беспокоиться о том, что вы собираетесь использовать. Это работает, несмотря на это. На одном уровне это обман; на другом уровне он доставит вас через горб. Это было бы сложнее в C++, в общем, потому что имена типов запекаются в имена функций и т. Д. Но в C все будет в порядке. (Вы также можете уйти с ним на C++, если никогда не используете функцию с одним из параметров 'in_addr_t'. Если вы использовали функции с параметрами' in_addr_t', вам пришлось бы тщательно отделить код, используя 'log4cpp' из кода с помощью 'libnet'. –

Смежные вопросы