0

リストの最後にoノードを追加するc++コードを書いています。ノードがすでに存在する場合にエラーをスローしたいのですが、動作していますが、すでに存在するノードで呼び出すと、このエラーが発生します。誰もが理由とそれがどのように修正されるか知っていますか?

'
Error'Abortedのインスタンスをスローした後に呼び出された例外終了

List& List::addnode(node p){
    node *Current=NULL;

    p.nextNode = NULL;
    p.previousNode = NULL;

    if (!firstNode) firstNode = &p;

    else Current = firstNode;
    while (Current){
            if ((*Current) == p){
                    throw NodeExist;
                    return *this;
            }
            if (!(Current->nextNode)){
                    Current->nextNode = &p;
                    p.previousNode = Current;
                    return *this;
            }
            Current = Current->nextNode;

    }

}

編集:私はそれをそのように呼びます

try{
x.addNode(p);
x.addNode(p1);
x.addNode(p2);
x.addNode(p1);
x.addNode(p4);
}
catch(int i){
cout<<i<<endl;
}

行の1つを消去するとx.addNode(p1);、例外なく正常に機能します...

4

2 に答える 2

3

あなたはどこでも捕まえて処理しませんNodeExist。そのため、メインまでコールチェーンを上っていきます。

catch(int i)NodeExistあなたが必要とするものを捕まえるために一致しませんcatch(Error e)

于 2011-05-01T08:51:29.630 に答える
0

他に何を期待していましたか?

あなたthrowは例外であり、アプリケーションは例外で終了しています。それはあなたがそれをするように言ったことをしている。

具体的にはcatch、プログラムのコールチェーンの上位のどこにも例外が発生していないため、例外はプログラムを終了します。

于 2011-05-01T08:59:57.433 に答える