我想声明来自我类的私有部分中两个不同类的两个对象。我遇到的问题是,第二个对象应该在构造函数中接受第一个对象。下面是我的类私有部分的示例:
class FactorGraph
{
private:
gtsam::ISAM2Params _parameters();
gtsam::ISAM2 _isam(_parameters);_parameters对象应该作为_isam对象的参数传递,但据我所知,这是不可能的,因为C++不允许这样做。有什么办法能做到这一点吗?
发布于 2019-05-15 11:59:56
在构造函数中初始化第二个对象(或者更好地同时初始化两个对象):
FactorGraph::FactorGraph()
: _parameters{}, _isam{_parameters}
{ }初始化按照类中成员列出的相同顺序进行(不管这个list(!)的顺序如何,所以在这里保持相同的顺序是个好主意,编译器甚至可能警告您),这保证了_isam不会得到任何未经初始化的东西。(如果您只是在类声明中定义对象,我就不知道这种保证了。)
在注释中,谢谢@ the :在您的类中,只需声明对象,而不需要初始化器
class FactorGraph
{
private:
gtsam::ISAM2Params _parameters;
gtsam::ISAM2 _isam;当您在没有初始化器的情况下声明它们时,应该在构造函数中初始化它们。为了做到这一点,它们不需要是默认的-可构造的,对象只需要初始化一次(在构造函数中)。
然后,如果您有更多的构造函数,不要忘记在任何地方都这样做,或者转发到这个:
FactorGraph(int) : FactorGraph{}, /* other initializers */ { }https://stackoverflow.com/questions/56148803
复制相似问题