0

次のコードは、Visual Studio 2010 で完全に問題なく例外をスローします。

        #include <iostream>
        #include <cmath>
        using namespace std;

        int perfectSquare(double sq, int nu);

        int main()
        {
            double num;
            double squareRoot;
            int perfectSq;

            cout << "Enter the a number: ";
            cin >> num;

            try
            {
                squareRoot = sqrt(num); 
                perfectSq = perfectSquare(squareRoot, num);
                cout << "The square root is: " << perfectSq << endl;
            }

            catch(char * exceptionString)
            {
                cout << exceptionString;
            }

            cout << "BYE." << endl;
        //  system("PAUSE");
            return 0;
        }


        int perfectSquare(double sq, int nu)
        {
            int temp = sq;
            if (sq != temp)     //clever test; if square root IS NOT an INT
            {
                throw "not a perfect square.\n";
            }
            else
            {
                return sq;
            }
        }

ただし、Xcode では再開せず、デバッガーでブレークポイントにヒットし続けます。たとえば、33 (完全な正方形ではない) を入力すると、次のエラーが表示されます: libc++abi.dylib: terminate called throwing an exception (lldb)

次の行を「スロー」する必要があります。「完全な正方形ではありません。」プログラムは終了するはずです(VS 2010のように)。デバッグせずにプログラムを最後まで実行したいだけなので、Xcode で例外ブレークポイントを有効にしたくありません。

ありがとうございます。

4

2 に答える 2

1

あなたが投げているのは文字列リテラルであり、XCodeでは aconst char*ではなく a のようですchar*

于 2012-11-28T10:49:51.343 に答える
1

あなたは実際に を投げているのではなくchar *、 を投げていconst char *ます。例外キャッチを次のように変更します

catch(const char * exceptionString)

そしてそれはうまくいくはずです。

C++ のすべてのリテラル文字列は、定数文字列へのポインタ、つまりconst char *.

于 2012-11-28T10:50:50.177 に答える