0

下面的程序编译成功,但无法运行并调用 abort() 函数,该函数会抛出一条消息,提示“此应用程序已请求运行时以不寻常的方式终止它。请联系应用程序的支持团队以获取更多信息。” , 为什么这样?

#include<cstring>
#include<iostream>

using std::string;
using std::endl;
using std::cout;

class ThrowException{

    private:
        string msg;
        int b;
    public:
        ThrowException(string m="Unknown exception",int factor=0) throw(string);        //A

};

ThrowException::ThrowException(string m, int f) throw(string):msg(m),b(f){                 //B
    if(b==1)
        throw "b=1 not allowed.";
}

int main(){

    try{
        ThrowException a("There's nothing wrong.", 1);
    }catch(string e){
        cout<<"The address of e in catch block is "<<&e<<endl;
    }    

}

错误信息

4

1 回答 1

7

在这条线上:

throw "b=1 not allowed."

你实际上是在扔一个const char*. 如果您将其更改为:

throw std::string("b=1 not allowed.")

或将 catch 块(和相应的throw限定符)更改为:

}catch(const char* e){

它会起作用的

于 2012-05-01T06:02:00.710 回答