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

时间:2017-10-29 08:29:08

标签: c++ constructor

我正在尝试通过派生类初始化基类成员项。我遇到的问题是我传递的值取决于“x”。 所以这就是我正在做的事情:

Derived:: Derived()
{
    uint8 number = getNumber();
    P p;

    if (number == 3)
    {
         p = P1;
    }
    else
    {
    p = P2;
    }

    Base(p);
}

我收到错误“类没有默认构造函数”Base“。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您只能在构造函数的成员初始值设定项列表序列中初始化基类。如果需要调用其他代码,可以将其委托给辅助函数:

P calculate_p() {
  uint8 number = getNumber();
  if (number == 3)
    return P1;

  return P2; 
}

Derived::Derived() : Base(calculate_p())
{
}