由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - Exception 问题求助
相关主题
Java的例外处理问题什么情况下不用写throws虚函数access权限改变问题
A try-catch problem in C++请教一道入门小题
which func will be called?C++问题
请问一个exception题目大家来做题C++。
为什么我看不懂下面的code,是不是水平还不够?protected/private inheritance
C++ 弱问一个题2
请教 C++的一个困惑 (operator delete)我这个C++程序有没有什么问题啊?请指点。。。谢谢。。。
面试问题问个C++ virtual function的问题 (转载)
相关话题的讨论汇总
话题: throw话题: exception话题: mye话题: catch
进入Programming版参与讨论
1 (共1页)
xt
发帖数: 17532
1
我在一个class里面写了一个方法:
class MyException :public std::exception
{
public:
MyException(const int code);
int getCode();
private:
int _code;
}
Class A
{
public:
void doWork() throw(MyException);
...
};
在一个方法里调用:
...
A a;
try {
a.doWork();
}catch(MyException &e) {
cout << "Code=" << e.getCode << endl;
} catch (...) {
cout << "An error occurred" << endl;
}
结果:每次总是落到catch(...)那里面。
谁知道为什么?我用VC的release编译好像有这个问题
P***y
发帖数: 2885
2
void dowork() throw(MyException&)?

【在 xt 的大作中提到】
: 我在一个class里面写了一个方法:
: class MyException :public std::exception
: {
: public:
: MyException(const int code);
: int getCode();
: private:
: int _code;
: }
: Class A

E*V
发帖数: 17544
3
something wrong with your code
check this
#include
#include
class mye :public std::exception{
public:
mye(const int code):_code(code){};
int getCode();
private:
int _code;
};
class A{
public:
void work() throw(mye) {throw mye(1);}
};
int main(){
A a;
try{
a.work();
}
catch (mye &e){
std::cerr << "in\n";
}
catch (...){
}
}

【在 xt 的大作中提到】
: 我在一个class里面写了一个方法:
: class MyException :public std::exception
: {
: public:
: MyException(const int code);
: int getCode();
: private:
: int _code;
: }
: Class A

xt
发帖数: 17532
4
奇怪的是debug编译好像没有错,结果release编译就出错了,
把那个exception直接给扔到最上层去,我只好catch(...)

【在 E*V 的大作中提到】
: something wrong with your code
: check this
: #include
: #include
: class mye :public std::exception{
: public:
: mye(const int code):_code(code){};
: int getCode();
: private:
: int _code;

B*V
发帖数: 3365
5
in my release version this file works as expected

【在 xt 的大作中提到】
: 奇怪的是debug编译好像没有错,结果release编译就出错了,
: 把那个exception直接给扔到最上层去,我只好catch(...)

B*V
发帖数: 3365
6
visual studio ultimate 2010 and 2012

【在 B*V 的大作中提到】
: in my release version this file works as expected
xt
发帖数: 17532
7
嗯,我再看看我的程序。
对了,我中间其实还经过了一个method:
void A.callWork();
没有定义throw(),是不是这个地方的原因啊?

【在 B*V 的大作中提到】
: in my release version this file works as expected
y**b
发帖数: 10166
8
没定义怎么抛出
void doWork() throw(MyException); //这个throw只是说明有可能抛出

【在 xt 的大作中提到】
: 嗯,我再看看我的程序。
: 对了,我中间其实还经过了一个method:
: void A.callWork();
: 没有定义throw(),是不是这个地方的原因啊?

xt
发帖数: 17532
9
看来是这个原因,等我回家试验一下。
另外,有没有人用boost?我发现如果我用mutex,lock()
和unlock()之间如果时间间隔太短,也会出错,害得我中间
还要sleep几十毫秒。

【在 y**b 的大作中提到】
: 没定义怎么抛出
: void doWork() throw(MyException); //这个throw只是说明有可能抛出

t****t
发帖数: 6806
10
没定义说明可以抛出任何东西.

【在 y**b 的大作中提到】
: 没定义怎么抛出
: void doWork() throw(MyException); //这个throw只是说明有可能抛出

相关主题
C++ 弱问一个虚函数access权限改变问题
请教 C++的一个困惑 (operator delete)请教一道入门小题
面试问题C++问题
进入Programming版参与讨论
t****t
发帖数: 6806
11
没有的事...你别处有bug, 不要乱找原因.

【在 xt 的大作中提到】
: 看来是这个原因,等我回家试验一下。
: 另外,有没有人用boost?我发现如果我用mutex,lock()
: 和unlock()之间如果时间间隔太短,也会出错,害得我中间
: 还要sleep几十毫秒。

d**********x
发帖数: 4083
12
zan

【在 t****t 的大作中提到】
: 没有的事...你别处有bug, 不要乱找原因.
M*********t
发帖数: 257
13
The standard practice for exceptions in C++ is
Throw by value, catch by const reference
First question to you is Did you throw by value?
How did you create the exception object in dowork()

【在 xt 的大作中提到】
: 我在一个class里面写了一个方法:
: class MyException :public std::exception
: {
: public:
: MyException(const int code);
: int getCode();
: private:
: int _code;
: }
: Class A

u****i
发帖数: 1679
14
re
b*******s
发帖数: 5216
15
throw只是说明预计会抛出的异常,而不在这个范围内的,用户可以安装一个异常处理
的回调函数进行处理,如果没定义过,就是用默认的异常处理,通常是terminate()

【在 y**b 的大作中提到】
: 没定义怎么抛出
: void doWork() throw(MyException); //这个throw只是说明有可能抛出

xt
发帖数: 17532
16
throw MyException(-1);

【在 M*********t 的大作中提到】
: The standard practice for exceptions in C++ is
: Throw by value, catch by const reference
: First question to you is Did you throw by value?
: How did you create the exception object in dowork()

y**b
发帖数: 10166
17
如果没有异常说明(exception specification),说明可能抛出任何东西,
如void doWork();
如果异常说明为空,说明不打算抛出任何东西,如woid doWork() throw();
如果异常说明非空,又抛出不同类型的异常,就terminate()了。
他没有定义函数体,抛出什么呢?

【在 t****t 的大作中提到】
: 没定义说明可以抛出任何东西.
y**b
发帖数: 10166
18
就是这个问题吧?

【在 xt 的大作中提到】
: throw MyException(-1);
t****t
发帖数: 6806
19
这个完全没有问题. 他的问题在别处.

【在 y**b 的大作中提到】
: 就是这个问题吧?
b*******s
发帖数: 5216
20
“如果异常说明非空,又抛出不同类型的异常,就terminate()了。”
不完全对

【在 y**b 的大作中提到】
: 如果没有异常说明(exception specification),说明可能抛出任何东西,
: 如void doWork();
: 如果异常说明为空,说明不打算抛出任何东西,如woid doWork() throw();
: 如果异常说明非空,又抛出不同类型的异常,就terminate()了。
: 他没有定义函数体,抛出什么呢?

相关主题
大家来做题C++。我这个C++程序有没有什么问题啊?请指点。。。谢谢。。。
protected/private inheritance问个C++ virtual function的问题 (转载)
题2C++ Q98: Call member function in virtual function (转载)
进入Programming版参与讨论
xt
发帖数: 17532
21
是这个原因。在函数定义中加了throw之后就好了

【在 y**b 的大作中提到】
: 没定义怎么抛出
: void doWork() throw(MyException); //这个throw只是说明有可能抛出

xt
发帖数: 17532
22
没有定义就抛出,我的理解是可以用catch(...)处理。这种错误还是
可以处理的错误,不是那种比如直接撞NULL的物理性错误。

【在 y**b 的大作中提到】
: 如果没有异常说明(exception specification),说明可能抛出任何东西,
: 如void doWork();
: 如果异常说明为空,说明不打算抛出任何东西,如woid doWork() throw();
: 如果异常说明非空,又抛出不同类型的异常,就terminate()了。
: 他没有定义函数体,抛出什么呢?

B*V
发帖数: 3365
23
你说的定义应该是声明,不是定义,定义是具体的实现
没有声明,可以抛任何异常,不是catch(...)来处理
catch(...)
就是吃掉所以异常

【在 xt 的大作中提到】
: 没有定义就抛出,我的理解是可以用catch(...)处理。这种错误还是
: 可以处理的错误,不是那种比如直接撞NULL的物理性错误。

1 (共1页)
进入Programming版参与讨论
相关主题
问个C++ virtual function的问题 (转载)为什么我看不懂下面的code,是不是水平还不够?
C++ Q98: Call member function in virtual function (转载)C++ 弱问一个
One c++ non-type template question请教 C++的一个困惑 (operator delete)
这个是个c++的bug 么?面试问题
Java的例外处理问题什么情况下不用写throws虚函数access权限改变问题
A try-catch problem in C++请教一道入门小题
which func will be called?C++问题
请问一个exception题目大家来做题C++。
相关话题的讨论汇总
话题: throw话题: exception话题: mye话题: catch