gpt4 book ai didi

c++ - Fortran 子程序的 Qt 错误处理

转载 作者:行者123 更新时间:2023-11-30 03:48:48 38 4
gpt4 key购买 nike

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

我试过像这样使用 try-catch block

 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函数后仍然崩溃。

最佳答案

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

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

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

关于c++ - Fortran 子程序的 Qt 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32967916/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com