skl*_*lum 2 c++ virtual overloading class function
我正在使用OpenCV开发一个系统.该系统具有一个具有虚函数的类,该函数与OpenCV使用的虚函数具有相同的名称(train).编译时,我收到以下警告:
/opt/local/include/opencv2/ml/ml.hpp:957:18:警告:'CvForestTree :: train'隐藏重载的虚函数[-Woverloaded-virtual]
与隐藏重载虚函数相关的大多数问题都涉及类和派生类,但在这种情况下我的(可能是不正确的)假设问题是OpenCV类实现的函数具有相同的名称.请注意,必须包含OpenCV标头才能使我的函数类定义起作用.
显然,我不想在我上课时更改函数的名称,我怀疑我做了一些愚蠢的事情来解决这个问题.
编辑:CvForestTree是OpenCV的类,不是我的.我不确定导致问题的代码行的确切区域,因为包含OpenCV头的任何文件都会发出警告.也许这意味着它是一个OpenCV错误.
问题不在于您的代码,而在于OpenCV的代码:CvForestTree类派生自CvTree且两个类都具有[虚拟] train()成员函数.由于CvForestTree不会覆盖所有三个重载(我不知道它是否覆盖任何train()重载,但是有两个重载CvForestTree和三个重载CvTree),至少有一个CvTree::train()函数被隐藏.
解决问题的方法是获得一个声明
using CvTree::train;
Run Code Online (Sandbox Code Playgroud)
在定义中CvForestTree.当然,这不是你的班级.这是警告的问题之一:通常会为您无法控制的代码发出警告.