C++ 如何在派生构造函数的花括号内初始化基构造函数?c++;
我试图通过派生类初始化基类成员项。我的问题是,我传递的值取决于“x”。 下面是我正在做的:C++ 如何在派生构造函数的花括号内初始化基构造函数?c++;,c++,constructor,C++,Constructor,我试图通过派生类初始化基类成员项。我的问题是,我传递的值取决于“x”。 下面是我正在做的: Derived:: Derived() { uint8 number = getNumber(); P p; if (number == 3) { p = P1; } else { p = P2; } Base(p); } 我收到错误“类“Base”不存在默认构造函数”。我做错了什么?您只能在构造函数的
Derived:: Derived()
{
uint8 number = getNumber();
P p;
if (number == 3)
{
p = P1;
}
else
{
p = P2;
}
Base(p);
}
我收到错误“类“Base”不存在默认构造函数”。我做错了什么?您只能在构造函数的成员初始值设定项列表序列中初始化基类。如果这需要调用其他代码,您可以将其委托给帮助器函数:
P calculate_p() {
uint8 number = getNumber();
if (number == 3)
return P1;
return P2;
}
Derived::Derived() : Base(calculate_p())
{
}
只能在构造函数的成员初始值设定项列表序列中初始化基类。如果需要调用其他代码,可以将其委托给帮助器函数:
P calculate_p() {
uint8 number = getNumber();
if (number == 3)
return P1;
return P2;
}
Derived::Derived() : Base(calculate_p())
{
}
并且calculate\u p不是类D的一部分?@NoaRegev-您的代码示例没有指出它必须是。通常最好使用尽可能松散的耦合。如果
calculate\u p
不需要访问该类,最好将其设为一个隐藏的无实用工具函数。@NoaRegev-很高兴听到它:)并且calculate\u p不是类D的一部分?@NoaRegev-您的代码示例没有指出必须这样做。通常最好使用尽可能松散的耦合。如果calculate\u p
不需要访问该类,最好将其设置为一个隐藏的无实用工具函数。@NoaRegev-很高兴听到:)您定义了构造函数Base::Base(p)在基类中?@HJuls2-定义了它。但是,正如错误所示,base()
没有。base(p);
不是一个c'tor调用。它定义了一个名为p
的对象,类型为base
,试图默认构造它。base(p)是构造函数调用。base::base(p);这不是一个c'tor调用。它可能看起来像一个,但这不是错误的一部分…:)你在基类中定义了构造函数Base::Base(pp)吗?@HJuls2-它已经定义。但是,正如错误所示,没有Base()
。Base(P);
不是一个c'tor调用。它定义了一个名为p
的对象,类型为Base
,试图默认构造它。Base(p)是构造函数调用。Base::Base(p);它不是一个c'tor调用。它可能看起来像一个,但它的解析方式不是错误的一部分…:)