【发布时间】:2021-03-07 08:32:42
【问题描述】:
所以我想为我的派生类创建一个构造函数,我给它一个基类的实例,这样我的基类就使用输入参数进行初始化,而我的派生类遵循默认构造函数。 我想出了这个(MWE):
class Derived : public Base {
Derived(){a = 0; b=3;};
Derived(Base * base): Base(*base),Derived(){};
int a;
int b;
}
但这给了我错误error: constructor delegation follows mem-initializer for 'Base'
那么我该怎么做呢?我知道一种可行的方法,但我想问是否有更好的方法,使我在默认构造函数和另一个构造函数中没有相同的代码。
所以我知道这是可行的:
class Derived : public Base {
Derived(){a = 0; b=3;};
Derived(Base * base): Base(*base){a = 0; b=3;};
int a;
int b;
}
【问题讨论】:
-
你的类被称为
Derived,但看起来你没有任何继承...你的意思是定义它为class Derived: public Base {吗? -
是的,我做到了。抱歉,我会编辑问题
-
复制构造函数的参数应该是
const Base& -
Derived只有private成员,Base的定义可能是相关的。如果只有struct Base {};足以重现错误,您可以添加 -
好吧,也许名称复制构造函数具有误导性。我想要一种复制构造函数。有了你的建议@YaroslavStetsyk,我仍然会遇到同样的问题。 (虽然没试过)
标签: c++ constructor derived-class