返回get/set方法中的向量
returning a vector in get/set method
我正在尝试将c 中的get/set方法用于向量。我不断出现一个错误,抛出一个std :: out_of_range的实例,该实例发生在我的主代码中 ego_points.at(1(时发生 ego_points.at 时发生的错误。我在下面提供标题文件和主要代码,但我会尝试在此处解释:
我有一个名为点的类,带有一个称为 scancallback 的公共功能,该函数构建vector scandeddata 并使用 set set 函数设置私有向量 TransMittyData 等于 scandedData 。在我的主代码中,我有一个对象,称为> point> points class的对象,并且我正在尝试设置一个称为 ego_points 等于<<<<<的向量strong> transmitteddata object p1 。我能够使用getVector((函数来构建向量ego_points,但无法访问其数据。有人知道为什么不这样做吗?的向量strong>
标题文件:
#pragma once
#include "ros/ros.h"
#include "sensor_msgs/LaserScan.h"
#include "iostream"
#include "string"
#include "motor_driver/Motor_speeds.h"
#include "motor_driver/cartesian.h"
#include <vector>
#ifndef MOTOR_DRIVER_H
#define MOTOR_DRIVER_H
using namespace std;
using namespace motor_driver;
class Points {
public:
vector<float> scannedData;
int i;
int size;
int size1;
int size2;
Points() : scannedData(0) {} //Must match the class name. This is the constructor.
void set(vector<float> transmittingData){
transmittedData = transmittingData;
}
void ScanCallback(const sensor_msgs::LaserScan::ConstPtr& scan) {
scannedData.clear();
size = scan->ranges.size();
scannedData.resize(size);
for(i = 0; i < size; i = i + 1){
scannedData.at(i) = scan->ranges[i];
}
set(scannedData);
}
int getSize(){
return size;
}
vector<float> getVector(){
return transmittedData;
}
private:
vector<float> transmittedData;
};
#endif
主代码:
#include "ros/ros.h"
#include "sensor_msgs/LaserScan.h"
#include "iostream"
#include "string"
#include "motor_driver/Motor_speeds.h"
#include "motor_driver/cartesian.h"
#include <motor_driver.h>
#include <vector>
using namespace std;
using namespace motor_driver;
Points p1;
int main(int argc, char** argv) {
ros::init(argc, argv, "motor_driver_node");
ros::NodeHandle nh;
ros::Subscriber sub;
ros::Rate r(1);
int ss;
int newsize;
int index;
vector<float> ego_points;
while (ros::ok()) {
sub = nh.subscribe<sensor_msgs::LaserScan>("/scan",10, &Points::ScanCallback, &p1);
newsize = p1.getSize();
ego_points.clear();
ego_points.resize(newsize);
ego_points = p1.getVector();
cout << ego_points.at(1) << endl;
r.sleep();
ros::spinOnce();
}
return 0;
}
我的错误:
:~/Desktop/Naes_Thesis$ rosrun motor_driver motor_driver_node
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check
Aborted (core dumped)
矢量至少有两个元素?如果要访问第一个元素,则应使用:
cout << ego_points.at(0) << endl;
大小方法可能不正确。应该是这样的:
int getSize() const {
return transmittedData.size();
}
否则大小可能包含与实际矢量大小
实际上我已经弄清楚了。问题是向量的大小为0,直到构建向量为止。因此,我添加了一个if(vector = 0(,然后在代码上(不做(部分并将其修复。感谢Noel-Lopes和1201 Programagalarm的贡献。
相关文章:
- C++从另一个类访问公共静态向量的正确方法是什么
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 声明高维向量的更简洁的方法
- 在C++中初始化向量映射的最有效方法
- C++11 迭代向量的新方法?
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- 有什么方法可以将具有不同模板参数的模板类实例放入向量中?
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 在向量中查找大于 0(或通常为 k)的最小元素的最佳方法是什么?
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 访问类成员向量最后一项的正确方法
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- 从列表/向量制作嵌套 for 循环的最佳方法是什么?
- 检查两个向量是否并行的最有效方法
- 如何从 node-ffi 调用 c++ 中以结构向量作为参数的方法?
- 返回向量元素的 l 值的正确方法是什么?
- 如何在方法主体中返回声明向量的引用?