c++ - 使用消息在 ROS 上发送 C 数组

标签 c++ c pointers ros

我的 ROS 消息很简单:

int8[64] packet1

我在我的谈话节点中发布:

terp::Packet1 msg;
msg.packet1={0,1,0,1,0,1};
ROS_INFO("Packet in string form: %s", msg->packet1);
chatter_pub.publish(msg);
ros::spinOnce();

我在我的监听节点中检索:

void resolve_input1(const uint8_t msg[]) {
  if (sizeof(msg->packet1)/sizeof(msg->packet1[0])<MAX_MSG_LEN) {
    memcpy(msg1,msg->packet1);
    ROS_INFO("I heard: [%s]\n",msg1);
  } else
    ROS_ERROR("Message from node 1 too long");
}

但是,在制作项目时,我收到以下错误:

listener.cpp:16:19: error: request for member 'packet1' in '*msg',
which is of non-class type 'const uint8_t {aka const unsigned char}
  if (sizeof(msg->packet1)/sizeof(msg->packet1[0])<MAX_MSG_LEN) {

将 resolve_input1 的声明更改为:

void resolve_input1(const terp::Packet1 msg) {

编辑: 摆脱了那个错误,但是现在出现了一个新的错误,这是相似的;强调我对消息的困惑:

listener.cpp:16:17 error: base operand of '->' has non-pointer type
'const Packet1 {aka const terp::Packet1_<std::allocator<void> >}'
    if (sizeof(msg->packet1)/sizeof(msg->packet1[0])<MAX_MSG_LEN) {
                  ^

最佳答案

resolve_input1 中,msgconst uint8_t* 类型,因此您可能必须将其reinterpret_castconst terp::Packet1* 在访问字段之前。

更新: 根据您的编辑,只需将 msg-> 更改为 msg.

关于c++ - 使用消息在 ROS 上发送 C 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34668623/

相关文章:

c - scanf 函数返回什么?

c - 此示例是否包含数据竞争?

http - Golang RedirectHandler() 返回接口(interface),以 *http.redirectHandler 结尾

C++ 将内容移动到函数中不起作用

c++ - 使用 C 样式链接从函数返回类模板安全吗?

c - 当变量定义为静态但声明为外部时没有警告或错误指示

c - 通过指针访问结构[c]

c++ - std::thread 不是全局变量,但在到达创建它的函数的末尾时不会超出范围?

c++ - 如何编写返回 const char* 的函数,这是一个修改后的 const char* 参数?

c++ - 如何获得char *(char数组)的真实长度和总长度?