2015-05-25 2 views
0

У меня есть код cpp, в котором я хочу вызвать функцию c. Обе компиляции хорошо .o файлы, но когда лязг ++ выполняется для компиляции, я получаю следующее сообщение об ошибке:ошибка: ожидаемый unqualified-id на extern «C»

file.cpp:74:12: error: expected unqualified-id 
    extern "C" 
     ^

код в файле CPP является следующее:

void parseExtern(QString str) 
{ 
#ifdef __cplusplus 
    extern "C" 
    { 
#endif 
     function_in_C(str); 
#ifdef __cplusplus 
    } 
#endif 

} 

Как Я избегаю ошибки? Я не могу скомпилировать c-файл с clang ++, мне действительно нужно использовать extern. Благодарю.

+0

@Mat: Это _answer_ !! Да, это короткий вопрос, но, ну, это простой вопрос: P –

+0

Итак, что лучший способ для меня вызвать функцию C из CPP? Что касается QString, я могу легко преобразовать в char *. –

+1

@LaurentCrivello: объявить функцию с помощью «extern» C ". Назовите его так же, как и любую другую функцию. –

ответ

7

Спецификация связи extern "C" - это то, что вы присоединяете к объявлению функции. Вы не помещаете его на сайт вызова.

В вашем случае, вы должны поместить следующий код в файле заголовка:

#ifdef __cplusplus 
    extern "C" 
    { 
#endif 
     void function_in_C(char const *); /* insert correct prototype */ 
     /* add other C function prototypes here if needed */ 
#ifdef __cplusplus 
    } 
#endif 

Затем в коде C++, вы просто назвать его, как и любой другой функции. Никакой дополнительной отделки не требуется.

char const * data = ...; 
function_in_C(data); 
+0

Работает как шарм, спасибо! –

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