首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在类中声明一个对象,这需要它的构造函数中的另一个对象?

如何在类中声明一个对象,这需要它的构造函数中的另一个对象?
EN

Stack Overflow用户
提问于 2019-05-15 11:55:58
回答 1查看 98关注 0票数 2

我想声明来自我类的私有部分中两个不同类的两个对象。我遇到的问题是,第二个对象应该在构造函数中接受第一个对象。下面是我的类私有部分的示例:

代码语言:javascript
复制
class FactorGraph
{
private:
    gtsam::ISAM2Params _parameters();
    gtsam::ISAM2 _isam(_parameters);

_parameters对象应该作为_isam对象的参数传递,但据我所知,这是不可能的,因为C++不允许这样做。有什么办法能做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-15 11:59:56

在构造函数中初始化第二个对象(或者更好地同时初始化两个对象):

代码语言:javascript
复制
FactorGraph::FactorGraph()
    : _parameters{}, _isam{_parameters}
{ }

初始化按照类中成员列出的相同顺序进行(不管这个list(!)的顺序如何,所以在这里保持相同的顺序是个好主意,编译器甚至可能警告您),这保证了_isam不会得到任何未经初始化的东西。(如果您只是在类声明中定义对象,我就不知道这种保证了。)

在注释中,谢谢@ the :在您的类中,只需声明对象,而不需要初始化器

代码语言:javascript
复制
class FactorGraph
{
private:
    gtsam::ISAM2Params _parameters;
    gtsam::ISAM2 _isam;

当您在没有初始化器的情况下声明它们时,应该在构造函数中初始化它们。为了做到这一点,它们不需要是默认的-可构造的,对象只需要初始化一次(在构造函数中)。

然后,如果您有更多的构造函数,不要忘记在任何地方都这样做,或者转发到这个:

代码语言:javascript
复制
FactorGraph(int) : FactorGraph{}, /* other initializers */ { }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56148803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档