从一个嵌套类继承到另一个嵌套类时出错

Posted

技术标签:

【中文标题】从一个嵌套类继承到另一个嵌套类时出错【英文标题】:Error while inheriting from one nested class to another 【发布时间】:2021-06-11 03:23:51 【问题描述】:
//In file1.hpp
class A

    protected:      
    class B
    
        public:
        B(int a, int b)
        : c(a),
          d(b) 
        private:
          int c;
          int d;
    ;
;

// In file2.hpp

Class C

    public:
    class D : public A::B --------- This line shows the error that "no matching function for call to B"
    
        public:
        D() ;
        virtual ~D() ;
        //something
    
    class E : public D
    
        E() ;
        virtual ~E() ;
    

在 D 类中继承 A::B 类时出现错误。 在我的 main.cpp 中,我直接实例化了 D 类。我假设当实例化 D 类时,类 A::B 会自动实例化。

错误是因为我正在实例化 D 类,但没有给出实例化 A::B 类的参数。

现在在 main.cpp 文件中,我只写 C::D 对象;

我的问题是,我如何从 main.cpp 实例化 D 类并为 A::B 类提供参数?我不想在实例化 D 类时作为参数传递。有没有办法创建一个方法? 简而言之,我可以在 main.cpp 中创建一个方法来传递 A::B 类的参数,但不能传递 C::D obj(hi, hey) 之类的参数

【问题讨论】:

【参考方案1】:

首先您需要将“B 类”声明为公共,并且您还需要从 D 类调用调用 B 构造函数(或添加默认构造函数)

示例代码:

//In file1.hpp
class A

    public:      
    class B
    
        public:
        //B()
        B(int a, int b)
        : c(a),
          d(b) 
        private:
          int c;
          int d;
    ;
;

// In file2.hpp

class C

    public:
    class D : public A::B //--------- This line shows the error that "no matching function for call to B"
    
        public:
        D(): B(1,2)
        ;
        virtual ~D() ;
        //something
    ;
    class E : public D
    
        E() ;
        virtual ~E() ;
    ;
;

int main()

    C c;    
    return 0;

【讨论】:

以上是关于从一个嵌套类继承到另一个嵌套类时出错的主要内容,如果未能解决你的问题,请参考以下文章

继承和嵌套类

C# 嵌套类和继承

为什么嵌套类“继承”?

如何覆盖继承的嵌套类中存在的虚拟方法

java 嵌套类

有没有办法在它的孩子中修改嵌套类的实现?