从一个嵌套类继承到另一个嵌套类时出错
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;
【讨论】:
以上是关于从一个嵌套类继承到另一个嵌套类时出错的主要内容,如果未能解决你的问题,请参考以下文章