随附的功能隐藏了过载的虚拟功能

Included function hides overloaded virtual functions

本文关键字:功能 虚拟 隐藏      更新时间:2023-10-16

我正在使用OpenCV开发系统。该系统的类具有虚拟函数的类,其名称(火车)与OpenCV使用的虚拟功能相同。编译时,我会收到以下警告:

/opt/local/include/opencv2/ml/ml.hpp:957:18:警告: 'cvforesttree :: train'隐藏的虚拟功能超载 [-woverloaded-virtual]

大多数与隐藏过载的虚拟功能有关的问题涉及类和派生类,但是在这种情况下,我的(也许是不正确的)假设问题是,类OpenCV的实现具有相同名称的函数。请注意,必须将OPENCV标题包括在我的课堂定义以进行工作的类别的定义。

显然,我宁愿不更改我制作的班级功能的名称,我怀疑我在做一些愚蠢的事情来解决这个问题。

编辑:cvforesttree是OpenCV的类,而不是我的类。我不确定导致问题的代码线的确切区域,因为任何包含OPENCV标头的文件都会发生警告。也许这意味着这是一个opencv错误。

问题不是您的代码,而是openCV的代码:CvForestTree类来自CvTree,并且两个类都具有[Virtual] train()成员函数。由于CvForestTree并未覆盖所有三个过载(我不知道它是否覆盖任何载荷,但CvForestTree中有两个train()过载,而CvTree中的三个)至少隐藏了CvTree::train()功能。

问题的解决方案是要有

之类的声明
using CvTree::train;

CvForestTree的定义中。当然,这不是您的班级。这是警告的问题之一:通常是为您无法控制的代码发出的。

实际上,您必须使用cvdtree :: train;在ml.hpp的几个地方:

class CV_EXPORTS CvBoostTree: public CvDTree
{
public:
  using CvDTree::train;
    CvBoostTree();

class CV_EXPORTS CvForestTree: public CvDTree
{
public:
  using CvDTree::train;
    CvForestTree();

我的解决方案是在include/opencv2/ml/ml.hpp中将using CvDTree::train;分为两行。1.Within cvforesttree类定义:

class CV_EXPORTS CvForestTree: public CvDTree
{
using CvDTree::train;

2。在CVBoostTree类中定义:

class CV_EXPORTS CvBoostTree: public CvDTree
{
using CvDTree::train;