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 中似乎是 a const char*,而不是 achar*

于 2012-11-28T10:49:51.343 回答
1

您实际上不是在扔 a char *,而是在扔 a const char *。将异常捕获更改为

catch(const char * exceptionString)

它应该可以工作。

C++ 中的所有文字字符串都等价于指向常量字符串的指针,即const char *.

于 2012-11-28T10:50:50.177 回答