2011-08-02 32 views
0

我已经成功地建立和运行既获Qt 4.3.7和OpenCV 2.3使用Qt启用。当我开始使用一个窗口:的OpenCV 2.3使用Qt 4.3.7

cvNamedWindow("video", 0); 

我成功加载一个完整的Qt界面!精彩:)

但是!当我使用命令

void callbackButton(int state, void* userdata){ 
int x; 
x=3; 
} 

cvCreateButton(nameb2,callbackButton,nameb2,CV_CHECKBOX,0); 

我得到错误信息

error LNK2001: unresolved external symbol _cvCreateButton 

我不明白作为Qt的接口已经有很多关于它的按钮?有人能解释我从包含什么可能会导致这个失踪?

谢谢!

回答

0

这是一个链接错误。 尝试将opencv .lib文件(或文件)添加到项目库路径中。 这可能有所帮助:VS2010 OpenCV

编辑

精制问题:即使添加任何OpenCV的 libary到您的项目链接将会失败。

原因:符号往往是简单地在库中不存在。

解决方案:必须更改一些设置和编译他们自己。

参见:openCV 2.2 createButton LNK 2019 error in Visual Studio 2010

0

您使用来电cvCreateButton了错误的参数。根据文档here功能的签名是

cvCreateButton(const char* button_name CV_DEFAULT(NULL), CvButtonCallback on_change CV_DEFAULT(NULL), void* userdata CV_DEFAULT(NULL), int button_type CV_DEFAULT(CV_PUSH_BUTTON), int initial_button_state CV_DEFAULT(0) 

和样品电话是:

cvCreateButton(NULL,callbackButton); 
cvCreateButton("button2",callbackButton,NULL,CV_CHECKBOX,0); 
cvCreateButton("button3",callbackButton,&value); 
cvCreateButton("button5",callbackButton1,NULL,CV_RADIOBOX); 
cvCreateButton("button6",callbackButton2,NULL,CV_PUSH_BUTTON,1); 

和回调函数的声明必须是:

CV_EXTERN_C_FUNCPTR(*CvButtonCallback)(int state, void* userdata)); 

你得到链接错误而不是编译器错误,因为cvCreateButton具有外部“C”链接 - 这意味着在编译时不能检查参数。

0

第三个参数必须是一个void*。改为:

cvCreateButton(nameb2,callbackButton,NULL,CV_CHECKBOX,0); 

它会工作。

编辑

声明上面给出错误。 第三个需要的参数是“void *” - 这与任何东西都是兼容的,因此C和C++都不应该对你提供的内容有任何问题。你不能提出一个链接器错误。

通过编码可以引发链接器错误的唯一原因是在C++中没有使用原型(忘记使用头文件),然后C++自己创建了一个错位的名称,它不会成为任何库的一部分。在这种情况下,编译器会首先在编译时告诉您缺少原型(对于C和C++) - 然后链接器可能会引发错误(仅适用于C++)。

如果你没有看到编译器的原型警告,那就不是你的问题。

0

我通过调用函数cv :: createButton而不是cvCreateButton(如果我正确调用OpenCV2中的方法)来解决此问题。