我目前正在尝试制作一个程序,使用openCV从网络摄像头拍摄照片并执行图形操作以在openCV中查找区域,然后将其传递给.c程序,该程序仅通过信息将信息发送到服务器端口编程。
我的问题是,即使我为openCV .cpp代码中使用的函数创建了一个.h文件,并将其包含在我的.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;
任何想法?
答案 0 :(得分:0)
您将不得不在其他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);
}
然后,在包装函数的标题中:
#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 ++类型的不透明指针,但由于您不能使用构造函数,因此您通常必须至少为它们编写工厂和删除函数。
答案 1 :(得分:0)
下面应该做的工作。您的example.h
文件:
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
int __declspec(dllexport) main(int argc, char** argv); // just modify this line !!!
#ifdef __cplusplus
}
#endif
在您的example.cpp
文件中,仅进行更改:
extern "C" int main(int argc, char** argv)
您可能想要修改main()
的函数名称或更改参数。