Можно ли скомпилировать и связать .c и .cpp (из openCV) вместе?

0

В настоящее время я пытаюсь создать программу, которая использует openCV для съемки с веб-камеры и выполнения графических операций для поиска области в openCV, а затем передачи ее в программу.c, которая просто отправляет информацию на сервер через программирование портов.

моя проблема в том, что даже при том, что я создал файл.h для функций, которые я использовал в коде.cpp openCV, и включил его в мой.c, там все еще ошибка с сообщением error: expected ') before '& token

вот мой simpleIS.h:

int captureimg();
int backgroundsub();
void noisesuppression(Mat &ptr);
void simplegetarea(Mat &img);

extern int area1,area2,area3,area4;

есть идеи?

  • 3
    В Си нет ссылок. Используйте вместо них указатели или значения.
  • 2
    Также не забывайте, что скомпилированные функции / переменные C / C ++ разрешаются в разные имена символов. Смотрите extern "C" для получения дополнительной информации
Показать ещё 5 комментариев
Теги:
opencv
linker
compilation

1 ответ

0

Вам придется обернуть функции, которые вам нужны в других функциях C++, и у этих функций есть внешняя связь "C". Вам также понадобятся структуры данных C, в которых хранятся материалы, необходимые для создания классов C++. Вызовите функции обертки из C.

Например, если у вас есть функция cpp, например:

int im_a_cxx_function(int , some_type, another_type &);

Вы создаете функцию обертки:

extern "C" int im_a_cxx_wrapper_function(int i, 
                                          struct some_C_type *st_C, 
                                          struct another_C_type *at_C)
{
    some_type st;
    another_type at;

    set_some_type(&st,  st_C);
    set_another_type(&at, at_C);

    return im_a_cxx_function(i, st, at);
}

Затем в заголовке для ваших функций обертки:

#ifdef __cplusplus
extern "C" {
#endif
int im_a_cxx_wrapper_function(int i, struct some_C_type *st_C, 
                               struct another_C_type *at_C);
#ifdef __cplusplus
}
#endif

Затем вы включаете заголовок для своих функций-оболочек в ваш.c файл и обычно вызываете функцию обертки. Главное, что вы не можете вызывать функцию без extern "C" из C из-за изменения имени, и поскольку вы не контролируете библиотечные функции, вы должны их обернуть. Вы также можете использовать непрозрачные указатели для типов C++, но поскольку вы не можете использовать конструкторы, вам, как правило, придется как минимум писать фабричные и удаленные функции для них.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню