我正在尝试获取Aruco AR 库通过在我的代码中尝试简单的测试来工作。
由于某种原因,我无法调用 detector() 来工作。我的代码如下:
cv::Mat image(480,640,CV_8UC3, mimFrameRGB.data());
MarkerDetector mDetector;
std::vector<Marker> markers;
CameraParameters cParams();
float markerSize = 0.1f;
mDetector.detect(image,markers,cParams,markerSize);
编译器提示没有与我的输入参数匹配的重载函数。具体来说,参数 3 的类型应为 cv::Mat。
查看MarkerDetector的头文件,发现以下两个方法调用:
void detect(const cv::Mat &input,std::vector<Marker> &detectedMarkers,cv::Mat camMatrix=cv::Mat(),cv::Mat distCoeff=cv::Mat(),float markerSizeMeters=-1) throw (cv::Exception);
void detect(const cv::Mat &input,std::vector<Marker> &detectedMarkers, CameraParameters camParams,float markerSizeMeters=-1) throw (cv::Exception);
我试图调用第二个,但它选择第一个并给我一个编译错误。出了什么问题?我的输入参数是否与任何一种情况都不匹配?
最佳答案
我认为问题在于这一行:
CameraParameters cParams();
这没有声明 CameraParameters
类型的变量,而是一个名为 cParams
的函数的函数原型(prototype),该函数不带任何参数,并且返回一个CameraParameters
。这是 C++ 语言中非常烦人的部分,因为代码是合法的,但没有做您想要的事情。
因为 cParams
实际上是函数原型(prototype)而不是变量声明,所以 C++ 重载解析机制对参数的类型感到困惑,并且无法正确选择您想要的重载。删除此行上的括号并使其直接读取
CameraParameters cParams;
应该解决这个问题。
希望这有帮助!
关于c++ - C++中重载方法调用的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9957929/