在引发“std::invalid_argument”的实例what()后调用terminate : stoi
社区首页
>
问答首页
>
在引发“std::invalid_argument”的实例what()后调用terminate : stoi
问
在引发“std::invalid_argument”的实例what()后调用terminate : stoi
EN
Stack Overflow用户
提问于
2016-12-10 06:52:29
回答 1
查看 123.8K
关注 0
票数 13
stoi函数使程序崩溃,并显示错误消息
代码语言:
javascript
复制
"****@****:~> g++ -std=c++0x m1.cpp stimulation.h stims.h Task.h exoskeleton.h ARAIG_Sensors.h Profile.h
ARAIG_Sensors.h:1:9: warning: #pragma once in main file [enabled by default]
Profile.h:1:9: warning: #pragma once in main file [enabled by default]
*****@****:~> a.out StimulationConfig.csv TaskConfiguration.csv SampleProfileConfig.csv SampleOutput.txt
First : a.out
Second : StimulationConfig.csv
terminate called after throwing an instance of 'std::invalid_argument'
what(): stoi
Aborted
我不知道为什么,有一个实例被传递到函数中,但仍然返回错误。有没有人可以帮我解决这个问题呢?
代码语言:
javascript
复制
#pragma once
#include <string>
#include <vector>
#include "Task.h"
#include <ostream>
#include "ARAIG_Sensors.h"
namespace m1
class Profile
ARAIG_Sensors araig;
std::vector<Task> ToRun;
std::vector<Task> Completed;
std::string studentFN;
std::string studentLN;
std::string studentSN;
std::string flightFN;
std::string flightLN;
std::string flightEN;
std::ostream& os;
struct calibration {
int Max;
int Min;
calibration cal;
public:
Profile(std::string fn, std::ostream& o, ARAIG_Sensors& a) : os(o)
araig = a;
//parsing student
std::ifstream infile(fn);
std::string line;
std::getline(infile, line);
int f = line.find_first_of(",");
studentFN = line.substr(0, f);
line = line.substr(f + 1);
f = line.find_first_of(",");
studentLN = line.substr(0, f);
studentSN = line.substr(f + 1);
//parsing flight
std::getline(infile, line);
f = line.find_first_of(",");
flightFN = line.substr(0, f);
line = line.substr(f + 1);
f = line.find_first_of(",");
flightLN = line.substr(0, f);
flightEN = line.substr(f + 1);
//parsing calibration
std::getline(infile, line);
f = line.find_first_of(",");
cal.Min = stoi(line.substr(0, f));
std::cout << cal.Min << std::endl;
line = line.substr(f + 1);
cal.Max = stoi(line);
std::list<Task> temp = araig.gettasks();
while (std::getline(infile, line))
for (std::list<Task>::iterator i = temp.begin(); i != temp.end(); i++)
if ((*i).getName() == line)
ToRun.push_back(*i);
break;
void displayToRun()
for (std::vector<Task>::iterator i = ToRun.begin(); i != ToRun.end(); i++)
(*i).execute(os);
void displayCompleted()
for (std::vector<Task>::iterator i = Completed.begin(); i != Completed.end(); i++)
(*i).execute(os);
void displayNext()
std::vector<Task>::iterator i = ToRun.begin();
(*i).execute(os);
void displayLast()
std::vector<Task>::iterator i = Completed.end();
(*i).execute(os);
void Run()
//excute next Task and move Task to Completed
std::vector<Task>::iterator i = ToRun.begin();
Task t = *i;
t.execute(os);