随附的功能隐藏了过载的虚拟功能
Included function hides overloaded virtual functions
我正在使用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;
- 如何在C++中获得"静态纯虚拟"功能?
- std::is_trivially_copyable_v 关于虚拟功能
- 类似虚拟的朋友功能?
- 是否有任何模式等效于虚拟模板功能?
- 隐藏重载虚拟功能的模板化访客:SFINAE 在使用?
- 为什么我无法覆盖虚拟功能?
- 二叉搜索树 - 使用 Linux 在虚拟机中制作删除功能
- 虚拟功能不起作用
- 如果在创建对象时创建了 VPTR,那么为什么具有虚拟功能的类的大小在 32 位系统上为 4,在 64 位机器上为 8
- 虚拟功能如何影响static_cast?
- __declspec(属性)和虚拟功能
- 实现来自第三方类的虚拟功能
- 消除未使用的虚拟功能
- 为什么虚拟继承即使不涉及虚拟功能也需要 vtable?
- C 虚拟功能的输出
- 抽象类 A 由类 C 继承"through"类 B "intermediary"。如何声明虚拟功能?
- 虚拟功能是否不太可能导致堆栈溢出
- 使用继承和虚拟功能应用五个规则
- 父会员功能中虚拟函数的C 行为
- 在多态性中重新定义功能(虚拟),具有不同数量的参数