【问题标题】:Qt error handling for fortran subroutinesfortran 子例程的 Qt 错误处理
【发布时间】:2016-01-03 05:59:39
【问题描述】:

我有一个从 C++ 函数调用 fortran 子例程的 Qt GUI 项目。这个 fortran 子例程从文本文件中读取一些数据。但是每当 fortran 代码失败时(例如项目列表中的错误整数等),GUI 窗口就会自动关闭。 如果发生错误,有没有办法防止它关闭?

我尝试使用这样的 try-catch 块

 try
 {
  // fortran function call
  test_();
 }
 catch(...)
 {
  qDebug()<<"Error";
 }

但它没有用。但是,使用 throw 语句引发异常确实有效。

我还尝试继承 QApplication 类并重新实现 notify() 函数:

   bool SafeApp::notify(QObject* obj,QEvent* event)
   {
   try
    {
     return QApplication::notify(obj,event);
    }
   catch(std::exception& e)
    {
     return false;
    }
   }

代码编译运行正常,但调用fortran函数后仍然崩溃。

【问题讨论】:

    标签: c++ qt error-handling fortran try-catch


    【解决方案1】:

    Fortran 没有异常,因此您调用的 Fortran 函数不会抛出 C++ 可以捕获的任何内容。

    OTOH,在 Fortran 中,I/O 错误等错误的默认行为是停止程序。 GFortran 运行时库为此使用 libc exit() 或 abort() 函数,具体取决于遇到的错误类型。

    您可以做的是将 IOSTAT= 和/或 IOMSG= 说明符添加到 Fortran I/O 语句中。在这种情况下,错误将导致非零 iostat 和 IOMSG 指向的字符串中的某些消息,而不是停止程序。

    【讨论】:

      猜你喜欢
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      相关资源
      最近更新 更多