C++ 如何在派生构造函数的花括号内初始化基构造函数?c++;

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”不存在默认构造函数”。我做错了什么?您只能在构造函数的

我试图通过派生类初始化基类成员项。我的问题是,我传递的值取决于“x”。 下面是我正在做的:

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调用。它可能看起来像一个,但它的解析方式不是错误的一部分…:)