我在使用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
采取不同的数据类型,但从错误信息来看,我不明白那个数据类型是什么。
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型数组中设置向量的信息。