每当我在堆栈为空时尝试将数字相加时,我都会尝试在我的堆栈程序中抛出错误。 在我的堆栈类的顶级函数中,如果我的堆栈上没有任何内容,我会抛出一个异常。 然后,我继续在我的主程序中创建一个 try 和 catch 块来捕获错误并显示一条消息。 但是,我收到下面列出的错误,我不知道如何解决它。
错误:
terminate called after throwing an instance of 'char const*'
类顶部():
const T& top() const throw (std::string){
if(m_next != NULL){
return m_data;
}
else{
throw("Nothing on the Stack");
}
};
int main():
int main(){
string op;
RobotCalc<int>* stack = new RobotCalc<int>;
int operand1;
int operand2;
cin >> op;
while(op != "@"){
if(op == "+"){
try{
operand1 = stack->top();
stack->pop();
operand2 = stack->top();
stack->pop();
stack->push(operand1 + operand2);
}
catch (string e){
cout << e;
}
}
代码还有更多内容,但这就是问题所在。 类函数有 2 个成员变量:T 类型的m_data(在本例中为 int)和指向下一个 RobotClass (堆栈成员)的指针。 这是堆栈的链接列表版本。
您正在捕获类型 string
的消息,而 throw 正在抛出const char*
。抓住const char*
或只是放一个".
throw/catch
不会对抛出的对象进行转换。如果你扔一个const char*
那么你需要抓住const char*
,而不是std::string
。
错误消息告诉您存在未捕获的异常。
我同意史蒂夫的观点。但是,应捕获异常,后跟错误消息而不是字符串。例如:
catch (exceptionName e) {
//catch block
}
C++ 标准异常