0

我有以下内容class exception

namespace A{
 namespace B{
   namespace C{
     class internal_error : public std::runtime_error{
        public:
             explicit internal_error(const std::string &arg) : std::runtime_error(arg) {};
     };
    }
   }
  }

在我的代码中,我有:

try{
  if(mkdipath(dirname, DIR_CREATION_MODE, &err)){
       string msg;
       msg = "failed to create path " + *dirname;
       logmsg(MSERROR, msg.c_str(), who);
       throw A::B::C::internal_error(msg);
  }
}
catch(){
    // how am I going to catch a A::B::C::internal_error?
}

我的问题是:我将如何捕获 A::B::C::internal_error?我应该使用:

catch(A::B::C::internal_error &error){
      string msg("You should never had happened\n");
      logmsg(MSERROR, msg.c_str(), who);
}

请忽略标签MSERROR, who, mkdirpath... 它们对问题并不重要。

4

2 回答 2

1
catch(A::B::C::internal_error &error){
    //...
}

很好,请注意前导下划线的来源,可能是错字。

于 2012-07-27T13:18:16.417 回答
0
try{
// ...
} catch (const A::internal_error& ex) {
// ...
} catch (const B::internal_error& ex) {
// ...
} catch (const C::internal_error& ex) {
// ...
}

这是你想要的?

于 2012-07-27T13:19:27.243 回答