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 に答える