c++ - 声明指向对象的指针作为类成员对象的参数

标签 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的回答非常有效。

最佳答案

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

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

确保在声明类的成员变量时有正确的顺序(porthandler,然后是 packetHandler,最后是 groupSyncWrite)。

关于c++ - 声明指向对象的指针作为类成员对象的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106094/

相关文章:

c++ - IEEE 浮点实现、精度和近似值的累积

c++ - 如何以用户友好的形式将 'double' 转换为 'string'

c++ - CUDA C++ : Expected an expression in kernel. cu 文件

c++ - 用新的集合对象替换集合对象

java - 在 Java 中使用 PrintWriter 打印到文件无法使用文件名

c++ - C++/Qt 中变量的别名?

javascript - 按 id 数组过滤对象数组

javascript - 在 Javascript 中访问对象的属性

c - 指针和指针澄清

java - 反向列表实现和指针理解