是否可以将.c和.cpp(来自openCV)编译并链接在一起?

问题描述:

我目前正在尝试制作一个程序,该程序使用openCV从网络摄像头拍摄图片,并执行图形操作以在openCV中找到一个区域,然后将其传递给一个.c程序,该程序通过端口将信息发送到服务器节目。是否可以将.c和.cpp(来自openCV)编译并链接在一起?

我的问题是,即使我创建了一个h文件为我在OpenCV中的.cpp代码中使用,并在我的.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

C中没有引用。使用指针或值代替。 –

+2

另外不要忘记,已编译的C/C++函数/变量解析为不同的符号名称。参见'extern“C”'获得更多信息 – valdo

+0

它比其他方式更易于编译c代码作为C++ – rerun

您将不得不将自己需要的功能封装到其他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文件中包含封装函数的标头,然后调用包装函数正常。主要原因在于,如果由于名称变形而无法从C中调用一个没有外部“C”的函数,并且由于您无法控制库函数,因此必须将它们包装起来。你也可以持有不透明的指向C++类型的指针,但由于你不能使用构造函数,所以你通常必须至少为它们写入工厂和删除函数。