当前位置: 首页 > 知识库问答 >
问题:

基类中的函数隐藏在子类中。我该如何解决这个问题?

潘宝
2023-03-14

在基类中,我有一个函数GetDetections,它接受一个字符串文件名,构造一个功能集,并将其工作延迟到一个纯虚拟函数GetDetections

在子类中,我实现了这个虚拟函数。

main中,我有一个子类的实例,并使用一个文件名调用GetDettions。我以为这将调用基类的非虚拟函数,该函数接受字符串参数,但这并不能编译。错误是:

掠夺。cpp:在函数“int main()”中:

掠夺。cpp:33:48:错误:调用“SubClass::GetDetections(const char[13])”时没有匹配的函数

掠夺。cpp:33:48:注:候选人为:

prog.cpp:26: 9:注意:虚拟int子类::GetDettions(常量d::向量

这是代码。(另载于http://ideone.com/85Afyx)

#include <iostream>
#include <string>
#include <vector>

struct Feature {
  float x;
  float y;
  float value;
};

class BaseClass {
  public:
    int GetDetections(const std::string& filename) const {
        // Normally, I'd read in features from a file, but for this online
        // example, I'll just construct an feature set manually.
        std::vector<Feature> features;
        return GetDetections(features);
    };
    // Pure virtual function.
    virtual int GetDetections(const std::vector<Feature>& features) const = 0;
};

class SubClass : public BaseClass {
  public:
    // Giving the pure virtual function an implementation in this class.
    int GetDetections(const std::vector<Feature>& features) const {
        return 7;
    }
};

int main() {
    SubClass s;
    std::cout << s.GetDetections("testfile.txt");
}

我尝试过:

  • 在子类中声明GetDettionsint GetDettions虚拟int GetDettions

共有2个答案

寿和通
2023-03-14

隐藏重载的虚拟函数。但是,您可以调用的BaseClasseGetDettions与它的限定名称为

std::cout << s.BaseClass::GetDetections("testfile.txt");
东方玉泽
2023-03-14

使用基类中重载的GetDirections函数隐藏派生类中的虚函数的实现。

试试这个:

using BaseClass::GetDetections;
int GetDetections(const std::vector<Feature>& features) const {
    return 7;
}

子类

 类似资料:
  • Second.CPP 我在表示错误:不允许类型名。那么这个错误的原因是什么呢?我想我还没有完全了解模板的整个机制--我对这个主题非常陌生。

  • 启动错误 ApplicationContext.若要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2019-10-17 15:44:43.968错误10460--[main]O.S.Boot.SpringApplication:应用程序运行失败 我的pom.xml:

  • 编写一个程序,定义一个类TestIsSubString和一个方法isSubString,该方法在另一个字符串中搜索特定的字符串;如果前者存在于后面的字符串中,则该方法必须返回true。例如:-isSubString(“cat”,“the cat in the hat.”)为true,但isSubString(“bat”,“the cat in the hat.”)为false。还要验证满足以下边界

  • 这是一个问题:输入10个数字(来自user),然后从user输入另一个数字。如果该数字是这10个enterd数字中的一个,则打印yes,否则打印No。我不知道怎么解决这个。

  • 这样,我有两个开发人员可以调用的公共类 classD仅对ClassA可见。所以我不能从ClassA调用classD(函数)。主要问题:如何实现?我只想打一个classA。classC正常。对于开发人员来说,classD和classB应该是不可见的。但仅对ClassA可见。有人能帮我吗?

  • 我怎么能解决这个问题? 颤振并建立网络 具有良好零安全性的建筑物 目标dart2js失败:异常:警告:'dart2js'entrypoint脚本已弃用,请改用'dart compile js'。 /C:/用户/DELL/AppData/本地/发布/缓存/托管/pub.dartlang.org/flutter_screenutil-5.3.1/lib/screenutil_init.dart: 23