Qt Creator не может скомпилировать внешний блок "C" с несовместимым кодом C - PullRequest
0 голосов
/ 08 декабря 2018

Я использую Qt Creator для проекта на C ++, и некоторые заголовки содержат внешние блоки "C" с объявлениями функций, которые содержат несовместимый с C код, такой как параметры по умолчанию и использование bool / true / false.

Я использую Qt 5.11 в Ununtu 5.11.

Вот пример фрагмента внешнего блока:

#ifdef __cpluscplus
extern "C" {
#endif

    int foo (int param1, int param2, int param3=0);

    bool bar(int param);

#ifdef __cpluscplus
}
#endif

Это приведет к следующим ошибкам компиляции соответственно:

file.h: expected ‘;’, ‘,’ or ‘)’ before ‘=’ token

file.h: error: unknown type name ‘bool’

Это компилируется без проблем с Makefile, но когда я использую qmake с Qt Creator, я получаю эти ошибки.Я не могу изменить этот заголовок, потому что он отмечен в используемом коде.

У меня есть проект Qt, который я пытаюсь интегрировать с существующей кодовой базой, которую я не могу изменить.

Пожалуйста, дайте мне знать, каковы мои варианты?Выключить флаг "__cplusplus"?

1 Ответ

0 голосов
/ 08 декабря 2018

Предполагая, что весь ваш код является кодом C ++ в файлах "* .cpp", удалите блок extern "C".

Смысл блока extern "C" состоит в том, чтобы сказать компилятору C ++ обрабатывать код внутриблок как C. Очевидно, что объявления функций foo и bar - это C ++, а не C.

Макрос __cplusplus определяется компилятором (gcc, clang и т. д.) и является частьюСтандарт С ++.

Если возможно, обратитесь за разъяснениями к тому, кто написал "file.h" и к существующей базе кода.

...