构造函数c ++中的异常

时间:2017-05-12 00:37:49

标签: c++ exception constructor

所以我有一个问题:

class Exception{
    private : string message;
    public : 
    Exception();
    Exception(string str);
    string what();

};
class Something{
public : Something(int m) throw(Exception);
....}

并在cpp文件中:

Exception::Exception()
    {
        message="cant divide by 0";
    }
    Exception::Exception(string str)
    {
        message = str;
    }
    Exception:string what()
    {
        return message;
    }

然后我尝试在一些构造函数中使用它

Something::Something(int m) throw(Exception)
    {
        if (m==0) 
        {
            throw Exception();
        }
     };

并在主

...
catch(Exception obj){
    cout<<obj.what();

}

它显示&#34;异常&#34;没有命名类型和&#39; obj&#39;没有宣布,我想知道为什么。

1 个答案:

答案 0 :(得分:0)

异常类可能不完整。

它看起来并不像Exception :: what()被正确定义。

...试

string Exception::what()
{
    return message;
}

另外,正如其他人所提到的,在c ++中你不必定义函数在java中抛出的内容。有关详细信息,请参阅此问题...

Throw keyword in function's signature

Something::Something(int m)
{
    if (m==0) 
    {
        throw Exception();
    }
};

通常我会捕获对抛出的异常的引用,除非它是原始类型。这样可以避免复制异常。

...试

...
catch(Exception& obj) {
    cout << obj.what();
}