C++中的对象构造

Object Construction in C++

本文关键字:对象 C++      更新时间:2023-10-16

我正在C++中处理一个小项目,该项目要求我创建我在另一个类中编写的自定义类的对象。该类名为FIRFilterModule,它有一个简单的空白构造函数。

作为一个java背景,我的冲动是这样创建它:

class SensorInput{
public:
  FIRFilterModule firFilter;
  ...More Class Members...
  SensorInput():firFilter(FIRFilterModule()){}
...};

然而,这会编译出非常有用的错误消息"error within this context"。我有点不明白为什么这不起作用。增加了我的困惑,我把代码改成了这个:

class SensorInput{
public:
  FIRFilterModule firFilter;
  ...More Class Members...
  SensorInput(){}
...};

它有效。

有人能帮我理解为什么会这样吗?

在这种特殊情况下,运行成员字段的默认构造函数,您不必做任何事情。构造函数是自动运行的。所以你可以写

class SensorInput{
public:
  FIRFilterModule firFilter;
  SensorInput() { ... }
};

只有当您需要调用具有参数的构造函数或初始化POD类型时,才需要成员初始化列表。例如,假设FIRFilterModule有一个构造函数,它采用了int。然后你会使用memeber初始化列表

SensorInput() : firFilter(42) { ... }

您发布的代码是正确的。

也许您忘记了在声明FIRFilterModule的位置包含标头。

否则,一切都应该正常。