我目前正在尝试制作一个程序,使用 openCV 从网络摄像头拍照并执行图形操作以在 openCV 中查找区域,然后将其传递给 .c 程序,该程序仅通过以下方式将信息发送到服务器端口编程。
我的问题是,尽管我为 openCV .cpp 代码中使用的函数创建了一个 .h 文件并将其包含在我的 .c 中,但仍然出现错误: error: Expected ')' before ' &' 标记
这是我的 simpleIS.h:
int captureimg();
int backgroundsub();
void noisesuppression(Mat &ptr);
void simplegetarea(Mat &img);
extern int area1,area2,area3,area4;
有什么想法吗?
最佳答案
您必须将所需的函数包装在其他 C++ 函数中,并使这些函数具有 extern“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);
}
然后,在包装函数的 header 中:
#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
然后,将包装函数的 header 包含在 .c 文件中,并正常调用包装函数。主要是由于名称修改,您无法从 C 中调用没有 extern“C” 的函数,并且由于您无法控制库函数,因此必须将它们包装起来。您还可以保存指向 C++ 类型的不透明指针,但由于您不能使用构造函数,因此通常至少必须为它们编写工厂和删除函数。
关于c++ - OpenCV C++ 与 extern "C",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22181102/