请求非class类型的Float64MultiArray中的成员'resize'
Request for member 'resize' in Float64MultiArray which is of non-class type
我正在尝试编译一个使用 ROS 数据类型的 C++ Arduino 草图 Float64MultiArray, and some examples 说你应该像这样初始化它:
std_msgs::Float64MultiArray array_msg;
array_msg.data.resize(9);
但是,尝试编译我的最小草图:
#include <std_msgs/Float64MultiArray.h>
std_msgs::Float64MultiArray vec3_msg;
void setup() {
vec3_msg.data.resize(3);
}
void loop() {
}
给我错误:
main.ino: In function 'void setup()':
main.ino:6:19: error: request for member 'resize' in 'vec3_msg.std_msgs::Float64MultiArray::data', which is of non-class type 'std_msgs::Float64MultiArray::_data_type* {aka float*}'
vec3_msg.data.resize(3);
^
我做错了什么?
示例说明:
The message structure has a single field called data which can be
treated as a std::vector type in your C++ node.
但这不适用于您的情况,因为它没有使用底层的 std::vector
类实现,而是默认为普通 float
数组,这可能是由于 Arduino 的特殊性(参见 rosserial).
您必须像处理任何其他普通数组一样处理 vec3_msg.data
。所以:
vec3_msg.data = (float*)malloc(sizeof(float) * 9);
for (int i = 0; i < 9; ++i)
{
vec3_msg.data[i] = someValue;
}
是一种方式。
您可能希望在某处保留一个您使用的静态数组,并使您的消息数据指向它。
float myGlobalArray[9];
setup()
{
vec3_msg.data = myGlobalArray;
}
// change myGlobalArray here and the
// data will update too.
请记住将 vec3_msg.data_length
设置为 9,因为在您的情况下这是必要的。有关更多信息,请参阅 this answer and the MultiArrayLayout docs。
我正在尝试编译一个使用 ROS 数据类型的 C++ Arduino 草图 Float64MultiArray, and some examples 说你应该像这样初始化它:
std_msgs::Float64MultiArray array_msg;
array_msg.data.resize(9);
但是,尝试编译我的最小草图:
#include <std_msgs/Float64MultiArray.h>
std_msgs::Float64MultiArray vec3_msg;
void setup() {
vec3_msg.data.resize(3);
}
void loop() {
}
给我错误:
main.ino: In function 'void setup()':
main.ino:6:19: error: request for member 'resize' in 'vec3_msg.std_msgs::Float64MultiArray::data', which is of non-class type 'std_msgs::Float64MultiArray::_data_type* {aka float*}'
vec3_msg.data.resize(3);
^
我做错了什么?
示例说明:
The message structure has a single field called data which can be treated as a std::vector type in your C++ node.
但这不适用于您的情况,因为它没有使用底层的 std::vector
类实现,而是默认为普通 float
数组,这可能是由于 Arduino 的特殊性(参见 rosserial).
您必须像处理任何其他普通数组一样处理 vec3_msg.data
。所以:
vec3_msg.data = (float*)malloc(sizeof(float) * 9);
for (int i = 0; i < 9; ++i)
{
vec3_msg.data[i] = someValue;
}
是一种方式。
您可能希望在某处保留一个您使用的静态数组,并使您的消息数据指向它。
float myGlobalArray[9];
setup()
{
vec3_msg.data = myGlobalArray;
}
// change myGlobalArray here and the
// data will update too.
请记住将 vec3_msg.data_length
设置为 9,因为在您的情况下这是必要的。有关更多信息,请参阅 this answer and the MultiArrayLayout docs。