如何在C++中正确地从ROS中发送一个数组?

问题描述 投票:1回答:1

我在使用Kinetic。

我有一个自定义消息 path.msg

string path_name
segment[] segments

我试图用该消息类型发送一个ROS目标。

我在代码中初始化了一个数组

cuarl_rover_planner::segment segments[path->getSegments().size()];
//do stuff that populates the array
cuarl_rover_planner::path action_path;
action_path.segments = segments; // Error here

我得到这个错误

error: no match for ‘operator=’ (operand types are ‘cuarl_rover_planner::path_<std::allocator<void> >::_segments_type {aka std::vector<cuarl_rover_planner::segment_<std::allocator<void> >, std::allocator<cuarl_rover_planner::segment_<std::allocator<void> > > >}’ and ‘cuarl_rover_planner::segment [(<anonymous> + 1)] {aka cuarl_rover_planner::segment_<std::allocator<void> > [(<anonymous> + 1)]}’)
         action_path.segments = segments;

我假设 action_path.segments 采取不同的数据类型,但从错误信息来看,我不明白那个数据类型是什么。

c++ ros
1个回答
1
投票

action_path.segments 是一个 std::vector<segment>但你的 segments 变量只是一个单一的段,而不是一个段的向量。如果你只想添加一个段,你可以使用 action_path.push_back(segment). 否则,你可以声明 segments 作为

std::vector<cuarl_rover_planner::segment> segments(path->getSegments().size());

如果你出于某种原因想使用一个原始指针数组(比如你可能在这里),你必须明确地将其设置为 std::vector 先,即

action_path.segments = std::vector<cuarl_rover_planner::segment>(segments, segments+path->getSegments().size());

如何从C型数组初始化std::向量? 了解更多关于从原始C型数组中设置向量的信息。

© www.soinside.com 2019 - 2024. All rights reserved.