使用消息在ROS上发送C数组
Sending C array on ROS using messages
我的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
中,msg
的类型为const uint8_t*
,因此在访问字段之前,您可能必须将其reinterpret_cast
到const terp::Packet1*
。
更新:根据您的编辑,只需将msg->
更改为msg.
即可。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '