c++ - C++中重载方法调用的问题

标签 c++ methods overloading augmented-reality

我正在尝试获取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/

相关文章:

c++ - 如何修复编译器警告 C6386 和 C6385?

c# - 结合相似的方法

java - 找不到符号错误

C++,重载 std::swap,编译器错误,VS 2010

c++ - 错误 C2228 : left of '.values' must have class/struct/union

c++ - 从数组转换为 vector 的边界

c++ - 为什么编译器内联产生的代码比手动内联慢?

c++ - 如何将单独输入的数字存储在同一个变量 C++ 中?

python - 你能用内部方法完全替换一个对象吗?

php - Twig 模板引擎不读取对象属性