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

how do I init a base constructor within curly braces of derived constructor? c++

本文关键字:构造函数 初始化 C++ 派生      更新时间:2023-10-16

我正在尝试通过派生类初始化基类成员项。我遇到的问题是我传递的值取决于"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())
{
}