0

スタックが空のときに数値を加算しようとすると、スタック プログラムでエラーをスローしようとしています。スタック クラスの最上位関数内で、スタックに何もない場合に備えて例外をスローします。次に、メイン プログラムに try and catch ブロックを作成して、エラーをキャッチし、メッセージを表示します。ただし、以下のエラーが表示され、修正方法がわかりません。

エラー:

terminate called after throwing an instance of 'char const*'

クラス トップ():

 const T& top() const throw (std::string){
                    if(m_next != NULL){
                            return m_data;
                    }
                    else{
                            throw("Nothing on the Stack");
                    }
            };

int main():

int main(){
    string op;
    RobotCalc<int>* stack = new RobotCalc<int>;
    int operand1;
    int operand2;


    cin >> op;
    while(op != "@"){
            if(op == "+"){
                    try{
                    operand1 = stack->top();
                    stack->pop();
                    operand2 = stack->top();
                    stack->pop();
                    stack->push(operand1 + operand2);
                    }
                    catch (string e){
                            cout << e;
                    }
            }

コードには他にもありますが、ここに問題があります。クラス関数には、T 型の m_data (この場合は int) と次の RobotClass (スタックのメンバー) へのポインターの 2 つのメンバー変数があります。これはスタックのリンクリスト バージョンです。

4

3 に答える 3

2

stringthrow が throwing であるのに対し、 type のメッセージをキャッチしていますconst char*。キャッチconst char*するか、単に ".

于 2013-10-31T02:05:07.033 に答える
0

私はスティーブに同意します。ただし、文字列ではなくエラー メッセージが続く例外をキャッチする必要があります。例えば:

  catch (exceptionName e) {
     //catch block
  }

C++ 標準例外

于 2013-10-31T02:17:14.037 に答える