簡體   English   中英

基類未捕獲C ++異常

[英]C++ Exception not caught by base class

我正在使用Visual C ++ 2017編譯以下代碼(已啟用C ++ 17功能)

int main() {
  try {
    // loot is some library that is linked as a dll
    auto game = loot::CreateGameHandle(loot::GameType::fonv, "c:\\something\\invalid", "C:\\something\\invalid");
    // throw std::invalid_argument("this works as expected");
  }
  catch (const std::exception &e) {
    std::cout << "caught as exception " << e.what() << std::endl;
  }
  catch (const std::invalid_argument &e) {
    std::cout << "caught as invalid_argument " << e.what() << std::endl;
  }
  catch (...) {
    std::cout << "caught by ..." << std::endl;
  }
}

編譯器報告,按預期方式:

warning C4286: 'const std::invalid_argument &': is caught by base class ('const stdext::exception &') on line 8

但是,應用程序輸出為

caught as invalid_argument Given game path "c:\something\invalid" does not resolve to a valid directory.

而且,這不僅是更改捕獲順序的方法,還是如果我刪除了最后兩個捕獲塊,則由於未處理的異常,應用程序將崩潰。

這怎么可能呢? 我假設這與編譯器設置有某種關系,使我的 std :: exception與庫中繼承的std :: invalid_argument的類型不同-但是為什么我的 std :: invalid_argument與它們的類型相同? 有沒有辦法解決這個問題? 因為該庫引發了許多不同的異常類型,所以我不能真正地單獨捕獲每個異常。

真該死,抱歉。 事實證明,我正在使用的構建系統將_HAS_EXCEPTIONS = 0添加到了預處理程序定義中。 這就是造成這種情況的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM