0

我有以下代码。

#include "math.h" // for sqrt() function
#include <iostream>
using namespace std;

int main()
{
    cout << "Enter a number: ";
    double dX;
    cin >> dX;

    try // Look for exceptions that occur within try block and route to attached catch block(s)
    {
        // If the user entered a negative number, this is an error condition
        if (dX < 0.0)
            throw "Can not take sqrt of negative number"; // throw exception of type char*

        // Otherwise, print the answer
        cout << "The sqrt of " << dX << " is " << sqrt(dX) << endl;
    }
    catch (char* strException) // catch exceptions of type char*
    {
        cerr << "Error: " << strException << endl;
    }
}

运行程序后,我输入一个负数并期望 catch 处理程序执行并输出Error: Can not take sqrt of negative number。相反,程序以以下消息终止

Enter a number : -9
terminate called after throwing an instance of 'char const*'
Aborted

为什么我的异常没有在 catch 处理程序中捕获?

4

2 回答 2

2

您必须添加 const:

catch (char const * strException) // catch exceptions of type char*

实际上,您正在 throwing char const *,但期望 mutable char *,它与这种方式不匹配(相反)。

于 2012-06-17T06:54:26.123 回答
1

你为什么还要扔和接绳子呢?

您应该抛出和捕获异常。

永远记住遵循拇指规则

每当您在代码中的引号中插入字符串时,它都会返回一个以 null 结尾的 const char

于 2012-06-17T07:04:51.097 回答