【问题标题】:How to make a catch block with more arguments that i catch it from objects from classes for exceptions?如何使用更多参数制作一个 catch 块,以便我从类的对象中捕获它以获取异常?
【发布时间】:2020-09-18 10:06:48
【问题描述】:

我的代码中有三个异常类,所以当我想使用更多参数(要捕获更多不同的对象时,我得到一个编译错误),那么我如何才能捕获更多异常?

我试过这样做

try{
        User * u = new FacebookUser(username,password,email,friends,likes,comments);
        network += u;
        }
        catch(InvalidPassword ip,InvalidEmail ie,MaximumSizeLimit ms){
            ip.message();
            ie.message();
            ms.message():
        }

第一个例外是检查密码是否至少有 1 个大写、小写和数字。

第二个例外是检查电子邮件是否至少有 1 个 @

第三个异常是改变静态变量,如果最大值等于n就抛出异常。

我的电子邮件和密码抛出异常在我的用户构造函数中。

【问题讨论】:

    标签: c++ exception try-catch


    【解决方案1】:

    如果您要捕获多种类型的异常,则需要分别捕获它们 - 否则,如果 InvalidEmail 被抛出,ip 会是什么?

    正确的代码会是这样的

    try {
        //...
    } catch (const InvalidPassword& ip) {
        //...
    } catch (const InvalidEmail& ie) {
        //...
    } catch (const MaximumSizeLimit& ms) {
        //...
    }
    

    另外,您可以将所有这些异常继承到同一个基类,并使message成为该基类的虚函数。

    (作为单独的说明,有时将异常用于此类检查被认为是不好的风格)

    【讨论】:

      猜你喜欢
      • 2012-01-16
      • 1970-01-01
      • 2010-09-08
      • 2011-03-30
      • 1970-01-01
      • 2012-06-04
      • 2011-07-30
      • 1970-01-01
      相关资源
      最近更新 更多