Как избежать конфликта в двух заголовочных файлах c ++ - PullRequest
1 голос
/ 16 марта 2011

Я использую два lib jsoncpp и imap (lib c-client).

json cpp имеет функцию записи. но в imap lib есть какой-то макрос #define write safe_write который переопределяет некоторый макрос из jsoncpp. Я не могу использовать обе библиотеки одновременно. как я могу избежать этого конфликта?

Ответы [ 3 ]

3 голосов
/ 16 марта 2011

Если вы не используете макрос записи из imap:

#include "imap.h"
#undef write
#include "jsoncpp.h"
2 голосов
/ 16 марта 2011

Лучший способ продолжить это заключить в заголовок, который будет вести себя «лучше», инкапсулирующий заголовок (здесь imap).

Обратите внимание, что это #define на самом деле встроенная функция ленивого человека,Вам необходимо идентифицировать все объявления safe_write и обеспечить соответствующие перегрузки в тех же пространствах имен.

// my_imap.h
#include "imap.h"
#undef write

inline void write(FILE* file, char* content, size_t size) {
  safe_write(file, content, size);
}

// ...

Затем включить my_imap.h вместо imap.h.

1 голос
/ 16 марта 2011

Если у вас есть доступ к заголовкам и вы используете библиотеку lib или dll, вы сможете #undef ее, если вы не используете макрос.

...