下面的程序编译成功,但它无法运行并调用abort()函数,该函数抛出一条消息,警告“此应用程序已请求Runtime以不寻常的方式终止它。请将应用程序的支持团队包含在内以获取更多信息信息。“,为什么会这样?
#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;
}
}
答案 0 :(得分:7)
在这一行:
throw "b=1 not allowed."
你实际上扔的是const char*
。如果您将其更改为:
throw std::string("b=1 not allowed.")
或将catch块(以及相应的throw
限定符)更改为:
}catch(const char* e){
它会起作用