2

我正在使用 OpenCV 开发一个系统。该系统有一个带有虚函数的类,它与 OpenCV 使用的虚函数同名(train)。编译时,我收到以下警告:

/opt/local/include/opencv2/ml/ml.hpp:957:18:警告:'CvForestTree::train' 隐藏重载的虚拟函数 [-Woverloaded-virtual]

大多数与隐藏重载虚函数有关的问题都涉及类和派生类,但在这种情况下,我(可能不正确)假设问题是 OpenCV 实现的类具有同名的函数。请注意,必须包含 OpenCV 标头才能使我的函数的类定义起作用。

显然,我不想更改我创建的类中的函数名称,并且我怀疑我正在做一些愚蠢的事情来解决这个问题。

编辑:CvForestTree 是 OpenCV 的课程,不是我的。我不确定导致问题的代码行的确切区域,因为任何包含 OpenCV 标头的文件都会出现警告。也许这意味着它是一个 OpenCV 错误。

4

3 回答 3

5

问题不在于您的代码,而在于 OpenCV 的代码:CvForestTree该类派生自CvTree并且两个类都具有 [虚拟]train()成员函数。由于CvForestTree没有覆盖所有三个重载(我不知道它是否覆盖了任何重载,但有两个train()重载 inCvForestTree和三个 in CvTree),因此至少CvTree::train()隐藏了一个函数。

解决这个问题的方法是有一个像这样的声明

using CvTree::train;

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

于 2012-10-31T22:18:43.143 回答
0

实际上,您必须使用 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();
于 2016-01-26T00:48:14.693 回答
0

我的解决方案是using CvDTree::train;include/opencv2/ml/ml.hpp. 1.在 CvForestTree 类定义中:

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

2. 在 CvBoostTree 类定义中:

class CV_EXPORTS CvBoostTree: public CvDTree
{
using CvDTree::train;
于 2018-07-10T08:00:26.740 回答