C++ 中的对象构造
Posted
技术标签:
【中文标题】C++ 中的对象构造【英文标题】:Object Construction in C++ 【发布时间】:2012-02-09 15:51:38 【问题描述】:我正在使用 C++ 编写一个小项目,该项目需要我创建一个自定义类的对象,该类是我在另一个类中编写的。该类名为FIRFilterModule
,它有一个简单的空白构造函数。
作为一个java背景,我的冲动是这样创建的:
class SensorInput
public:
FIRFilterModule firFilter;
...More Class Members...
SensorInput():firFilter(FIRFilterModule())
...;
但是,这与“此上下文中的错误”这一非常有用的错误消息一起编译。我有点迷失为什么这不起作用。增加了我的困惑,我将代码更改为:
class SensorInput
public:
FIRFilterModule firFilter;
...More Class Members...
SensorInput()
...;
有效。
谁能帮我理解为什么会这样?
【问题讨论】:
如上所述,FIRFilterModule 是我编写的一个类,具有公共构造函数。 firFilter 是我在 SensorInput 中创建的对象。那是我得到的完整错误。我使用的编译器是风河的默认编译器 【参考方案1】:在这种特殊情况下,为成员字段运行默认构造函数,您无需执行任何操作。构造函数自动运行。所以你可以写
class SensorInput
public:
FIRFilterModule firFilter;
SensorInput() ...
;
只有在需要调用有参数的构造函数或初始化 POD 类型时才需要成员初始化列表。例如,假设FIRFilterModule
有一个构造函数,它采用int
。然后你会使用成员初始化列表
SensorInput() : firFilter(42) ...
【讨论】:
“你不需要做任何事情” 这适用于在任何地方构建 FIRFilterModule 吗?比如说我在我的 int main() 中创建了一个。 @jozefg 是的。它适用于声明FIRFilterModule
实例的任何地方。请注意,这与说 FIRFilterModule*
不同
"只有在需要调用有参数的构造函数时才需要成员初始化列表。" 或者初始化POD类型,否则会保持未初始化状态。【参考方案2】:
The code you posted is correct.
也许您忘记包含声明 FIRFilterModule
的标头。
否则,一切都应该正常。
【讨论】:
对不起,但不...我包括了所有内容并三重检查了 FIRFilterModule。我也请其他人查看我的代码,错误肯定在那个代码 sn-p 中。 @jozefg 如果它在那个 sn-p 中,请复制我在您的编译器中发布的代码并尝试一下。如果它不工作,你的编译器是错误的。 @jozefg 或者它只是告诉你初始化是没有意义的,正如 JaredPar 提到的那样。 @AlanStokes 是的,我后来对此发表了评论并称赞了 JaredPar。 是的,我的编译器很奇怪。这似乎是错误的根源。以上是关于C++ 中的对象构造的主要内容,如果未能解决你的问题,请参考以下文章