ベクトルのC++でget/setメソッドを使用しようとしています。私はstd :: out_of_rangeのインスタンスをスローするエラーを続けています。私はego_points.at(1)のインデックス値を私のメインコードに入れようとします。私は以下の私のヘッダファイルと私のメインのコードを提供していますが、私は、ここで説明しようとするでしょう:get/setメソッドでベクトルを返す
を私は持っているというクラスScanCallbackベクトルscannedDataを構築し、使用していますと呼ばれるパブリック関数とポイントは、プライベートベクトルのtransmitDataをと等しいと設定します。scannedData。私のメインのコードでは、私はポイントクラスのP1をオブジェクトと呼ばれていると私はベクトルを設定しようとしていますego_points オブジェクトのtransmittedDataP1に等しいと呼ばれます。私はgetVector()関数を使ってベクトルego_pointsを構築することはできますが、データにアクセスすることはできません。誰も知りませんか?
ヘッダーファイル:
#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)
デバッガは 'p1'に含まれるベクトルのサイズについてあなたに何を伝えますか? – 1201ProgramAlarm