gpt4 book ai didi

c++ - 继承:没有合适的默认构造函数可用

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:28:07 25 4
gpt4 key购买 nike

我收到错误:B 没有合适的默认构造函数。但是,我不明白为什么编译器要调用默认构造函数,当我给出参数 ii 而不想调用默认构造函数时。

#include <iostream>
using namespace std;

class A {
int i;
public:
A(int ii) { i = ii; cout << "Constructor for A\n"; }
~A() { cout << "Destructor for A\n"; }
void f() const{}
};

class B {
int i;
public:
B(int ii) { i = ii; cout << "Constructor for B\n"; }
~B() { cout << "Destructor for B\n"; }
void f() const{}
};

class C:public B {
A a;
public:
C() { cout << "Constructor for C\n"; }
~C() { cout << "Destructor for C\n"; }
void f() const {
a.f();
B::f();
}
};

class D:public B {
C c;
public:
D(int ii) { B(ii); cout << "Constructor for D\n"; }
~D() { cout << "Destructor for D\n"; }
};

int main() {
D d(47);
}

最佳答案

你的父构造函数应该在初始化列表中被调用:

class D:public B {
C c;
public:
D(int ii) : B(ii)/* <- */ { cout << "Constructor for D\n"; }
~D() { cout << "Destructor for D\n"; }
};

注意/* <- */注释。这需要改变。

你现在正在做的是在你的类 D 构造函数中创建一个 B() 的实例,它没有被使用:

D(int ii) { B(ii); /* <- useless*/ }

关于c++ - 继承:没有合适的默认构造函数可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9657439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com