声明对象的指针作为类成员对象的参数

时间:2018-11-01 17:11:22

标签: c++ object pointers constructor

我正在尝试使用C ++ SDK控制Dynamixel电机,如果可能的话,我想从一个类中进行操作。我需要两个指向一个对象的指针,而另一个对象则是类成员变量。我找到了How can I initialize C++ object member variables in the constructor?,但是在讨论对象的指针和对象本身时,我需要结合使用。我需要的三个成员如下所示(摘自示例代码):

dynamixel::PortHandler *portHandler = dynamixel::PortHandler::getPortHandler(DEVICENAME);

dynamixel::PacketHandler *packetHandler = dynamixel::PacketHandler::getPacketHandler(PROTOCOL_VERSION);

dynamixel::GroupSyncWrite groupSyncWrite(portHandler, packetHandler, ADDR_MX_GOAL_POSITION, LEN_MX_GOAL_POSITION);

问题在于GroupSyncWrite对象取决于其上方的指针,并且必须在前两个指针之后声明,所以类似这样:

Foo::Foo() : groupSyncWrite(...)
{
    porthandler = dynamixel::PortHandler::getPortHandler(DEVICENAME);
    packetHandler = dynamixel::PacketHandler::getPacketHandler(PROTOCOL_VERSION);
}

似乎不起作用,因为groupSyncWrite构造函数将porthandler和packethandler作为参数。

如果有人知道如何执行此操作,或者如果无法执行此操作,我将不胜感激。

编辑:

简而言之,问题是如何在同一构造函数中初始化对象之前,先在构造函数中初始化两个对象指针。

有一个对象foo,它需要两个指向对象的指针作为参数,即bar * one和baz * two。对象和指针都是我的类的成员,需要在类的构造函数中进行初始化。问题是我不知道如何初始化格式的指针

Class::Class() : one() {}

,例如可以使用非指针对象完成的操作。 @Matthieu的答案非常有效。

1 个答案:

答案 0 :(得分:1)

在构造函数的初始化列表中按顺序正确初始化它们:

Foo::Foo()
 : porthandler(dynamixel::PortHandler::getPortHandler(DEVICENAME)),
 packetHandler(dynamixel::PacketHandler::getPacketHandler(PROTOCOL_VERSION)),
 groupSyncWrite(porthandler, packetHandler)
{
}

在声明类的成员变量(端口处理程序,然后是packetHandler,最后是groupSyncWrite)时,请确保顺序正确。