我已经创建了一个自定义异常类testException
。
throw
创建一个testException
对象,在创建时会收到所需的异常名称。
当捕获testException
(通过引用)时,它应该使用成员函数Get.Exception
返回异常的名称。
由于某种原因,该函数未被调用,而是我收到错误:
terminate called after throwing an instance of testException
我看到了一个类似的例子here,据说应该可行。
代码:
Exception.h
#include <iostream>
#include <string>
#ifndef TESTEXCEPTION_H
#define TESTEXCEPTION_H
using std::cout;
using std::cin;
using std::endl;
using std::string;
class testException {
public:
testException(string);
string GetException();
~testException();
protected:
private:
string myexception;
};
#endif // TESTEXCEPTION_H
Exception.cpp
#include "testException.h"
testException::testException(string temp) : myexception(temp) {
// ctor
}
string testException::GetException() {
return myexception;
}
testException::~testException() {
// dtor
}
main.h
#include <iostream>
#include "testException.h"
using std::cout;
using std::cin;
using std::endl;
int main() {
throw testException ("Test");
try {
// Shouldn't be printed if exception is caught:
cout << "Hello World" << endl;
} catch (testException& first) {
std::cerr << first.GetException();
}
return 0;
}
答案 0 :(得分:3)
您将异常抛出try
块之外。
int main() {
throw testException("Test"); // Thrown in main function scope.
// Will result in call to terminate.
try {
/* ... */
} catch (testException& first) {
// Only catches exceptions thrown in associated 'try' block.
std::cerr << first.GetException();
}
/* ... */
}
只有在try-catch子句的内部被抛出时才能捕获异常。在main
函数范围内抛出异常将导致调用terminate
。
try
块将“尝试”执行内部的所有内容,如果在此过程中抛出任何异常,如果关联的异常处理程序采用一个类型为抛出异常隐式的参数,它们将被捕获可转换为。
一旦抛出异常,将跳过try块中剩余的其余语句,所有具有自动存储持续时间的对象将被销毁,异常将被相应处理。
Live example with throw statement moved inside try-catch clause
答案 1 :(得分:2)
将投掷线:throw testException ("Test");
移至try {} catch(catch (testException& first) {}
区块。