内存位置的c ++ std :: out_of_range

时间:2014-01-30 17:19:38

标签: c++

我正在尝试制作一个基本计算器,用户可以输入2个数字和一个运算符,计算就可以了。我无法弄清楚为什么我得到这个错误,我不完全确定这个错误意味着什么,因为我是c ++的新手,只有一些java的经验。

这就是我所拥有的:

Calculation.h

#include <iostream>
using namespace std;

class Calculation{
private:
    int x;
    int y;

public:
    Calculation();
    int calculateAddition(int, int);
    int calculateSubtraction(int, int);
    int calculateMultiplication(int, int);
    int calculateDivision(int, int);
};

Calculation.cpp

#include "Calculation.h"

Calculation::Calculation(){
    x = 0;
    y = 0;
}

int Calculation::calculateAddition(int x, int y){
    return x + y;
}

int Calculation::calculateSubtraction(int x, int y){
    return x - y;
}

int Calculation::calculateMultiplication(int x, int y){
    return x * y;
}

int Calculation::calculateDivision(int x, int y){
    return x / y;
}

Main.cpp的

#include <iostream>
#include <sstream>
#include <string>
#include "Calculation.h"
using namespace std;

int main(){
Calculation calc;
int i = 0;
char k;
int x;
int y;
char j = 'a';
string inputCalc;
stringstream str;

while(j != 'q'){
    cout << "1. Make Calculation" << endl;
    cout << "2. Quit" << endl;
    cin >> i;
    if(i == 1){
        cout << "Input calculation:" << endl;
        cin >> inputCalc;
        k = inputCalc.at(2);
        str << inputCalc.at(1);
        str >> x;
        str << inputCalc.at(3);
        str >> y;
        if (k == '+'){
            calc.calculateAddition(x, y);
        }
        else if (k == '-'){
            calc.calculateSubtraction(x, y);
        }
        else if (k == '*'){
            calc.calculateMultiplication(x, y);
        }
        else if (k == '/'){
            calc.calculateDivision(x, y);
        }
        else{
        }
    }
    else if(i == 2){
        j = 'q';
    }
    else{
        cout << "Invalid input. Please enter 1 or 2." << endl;
    }
}
}
编辑:啊,谢谢你,我忘记了一切从0开始。傻我。

2 个答案:

答案 0 :(得分:1)

假设cin >> inputCalc中的输入为“1 + 2”。 input.at(0)=='1'input.at(1)=='+'input.at(2)==2。 input.at(3)超出范围。

答案 1 :(得分:1)

我认为这个错误发生在一些语句中

str << inputCalc.at(3);

你确定inputCalc至少有四个字符,这个语句才有效吗?考虑到有效的indecies范围是[0,length() - 1]

std :: out_of_range是std :: string成员函数在()抛出的标准异常。