[填坑]mwArray作为类的成员变量报错问题mwArray全局变量报错问题

本文探讨了C++程序中使用mwArray导致的意外退出问题,主要出现在mwArray作为全局变量或类成员变量时。错误原因在于MATLab类库未正确初始化,应在main函数中调用Initialize()和Terminate()解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

14:01:24: 程序异常结束。

14:01:24: The process was ended forcefully.

C++程序中使用mwArray导致程序意外退出的问题一般会在两种情况中出现

1、mwArray作为全局变量

2、mwArray作为类的成员变量

编译通过,运行时报错的原因只有一个,没有对MATLab的类库初始化!也就是说在调用 Initialize();之前定义了mwArray变量(对象),有些同学比较聪明,在类的构造函数中调用了Initialize(); 实测这样是不对的,还是顺序问题,应该在创建类的对象之前就Initialize();

解决方法:

1、在main函数里进行Initialize();

2、在main函数结束时Terminate();

 

参考链接:mwArray as a variable in a c++ class

https://stackoverflow.com/questions/25936328/c-mwarray-as-a-variable-in-a-c-class

#include "hhh.h" #include "QDebug" #include "mclmcr.h" hhh::hhh() {} bool initMatlabRuntime() { // 打印MCR路径 wchar_t pathBuf[32767]; GetEnvironmentVariableW(L"PATH", pathBuf, 32767); qDebug() << "当前PATH:" << QString::fromWCharArray(pathBuf); // 初始化应用 const char* opts[] = {"-nojvm", "-noStartupScreen"}; mclmcrInitialize(); if (!mclInitializeApplication(opts, 2)) { const char* err = mclGetLastErrorMessage(); qCritical() << "MCR初始化失败:" << (err ? err : "未知错误"); return false; } // 初始化组件 try { if (!processSignalInitialize()) { throw std::runtime_error("组件初始化失败"); } } catch (const mwException& e) { qCritical() << "MATLAB异常:" << e.what(); mclTerminateApplication(); return false; } qDebug() << "==== MATLAB环境初始化成功 ===="; return true; } void callMatlabFunction() { try { // 输出参数(4个) mwArray azi_fit, ele_fit, azi, ele; // 输入参数(7个)------------------------------------------------ mwArray filename("data_70.bin"); // 二进制文件路径 mwArray f(1.001e9); // 1.001 GHz mwArray d(1.5); // 1.5 米 mwArray fs(30.72e6); // 30.72 MHz采样率 mwArray c(3e8); // 光速 mwArray rot_speed(2 * 3.141592653589793); // 2π rad/s mwArray pha_diff_err(1.109798); // 相位误差rad // 调用MATLAB函数------------------------------------------------ // 参数顺序必须严格匹配头文件声明: // processSignal(4个输出, 7个输入) processSignal(4, azi_fit, ele_fit, azi, ele, filename, f, d, fs, c, rot_speed, pha_diff_err); // 获取结果----------------------------------------------------- double azi_fit_val = azi_fit.Get(1,1); double ele_fit_val = ele_fit.Get(1,1); double azi_val = azi.Get(1,1); double ele_val = ele.Get(1,1); qDebug() << "时域估计方位角:" << azi_fit_val << "rad"; qDebug() << "时域估计俯仰角:" << ele_fit_val << "rad"; qDebug() << "频域估计方位角:" << azi_val << "rad"; qDebug() << "频域估计俯仰角:" << ele_val << "rad"; } catch (const mwException& e) { qDebug() << "MATLAB异常:" << e.what(); } } 如何在主函数中调用callMatlabFunction里面的信息
最新发布
03-14
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值