Вызов библиотеки C ++ из main.mm приводит к ошибке компиляции - проверьте конфликты объявлений с макросом - PullRequest
0 голосов
/ 30 января 2012

У меня есть следующий код в заголовке, включенном в main.mm:

1.  virtual int truncate(DbTxn *, u_int32_t *, u_int32_t);
2.  virtual int upgrade(const char *name, u_int32_t flags);
3.  virtual int verify(
4.      const char *, const char *, __DB_STD(ostream) *, u_int32_t);

Первые две строки предназначены для контекста и показывают, что работает.Третья и четвертая строки содержат следующие ошибки:

Макрос «проверить» передал 4 аргумента, но принимает только 1

«проверить», объявленный как «виртуальное» поле

Если я добавлю случайный символ в конец объявления проверки, например verityx, тогда файл будет скомпилирован без проблем.verify зарезервировано?

Редактировать: Мой файл main.mm:

#import <Foundation/Foundation.h>

#import "db_cxx.h"

int main (int argc, const char * argv[])
{

    return 0;
}

Редактировать 2:

Только два использования слова «проверить» вБеркли заголовок являются:

virtual int log_verify(DB_LOG_VERIFY_CONFIG *);

virtual int verify(
    const char *, const char *, __DB_STD(ostream) *, u_int32_t);

1 Ответ

2 голосов
/ 30 января 2012
Macro "verify" passed 4 arguments, but takes just 1

означает, что где-то есть #define verify(x) .... Это не зарезервировано в C ++, но то, что вы включаете, определяет это.

Быстрый

fgrep -r verify /usr/include | fgrep '#define'

дает, помимо всего прочего,

/usr/include/AssertMacros.h:        #define verify(assertion) __Verify(assertion)

После того, как вы включили все необходимые заголовки OS X / iOS, перед включением bdb должно быть безопасно до #undef verify.

...