函数调用如何传入正确数量参数?MATLAB转MEX参数不匹配报错求解
解决MATLAB转MEX后函数参数不匹配问题
报错核心原因是目标函数被调用时传入的参数数量不足,原函数要求9个输入参数,实际调用时传入了0个,可按以下步骤排查解决:
- 核对测试脚本调用格式
原MATLAB函数定义为:
生成的MEX函数调用规则与原MATLAB函数完全一致,测试时必须传入全部9个输入参数,不能省略,调用格式参考:function[A1, B2, C3, D4, E5, F6] = fcn(one, two, three, four, five, six, seven, eight, nine)[A1,B2,C3,D4,E5,F6] = fcn(参数1,参数2,参数3,参数4,参数5,参数6,参数7,参数8,参数9) - 核对代码生成配置
若确认调用时传满9个参数仍报错,检查MATLAB Coder配置:
- 确认代码生成的入口函数是否为
fcn,是否误将其他名为Numbers的函数设置为入口 - 检查是否开启了参数默认值、可变参数等代码生成不原生支持的特性,若生成阶段做了参数裁剪,会导致预期参数数量和原函数不一致
- 确认代码生成的入口函数是否为
- 核对MEX函数名映射
若生成的MEX文件实际命名为Numbers(后缀根据平台不同为mexw64/mexa64/mexmaci64),调用时需使用Numbers(9个参数)的格式,不要和原.m文件的fcn函数名混淆。可执行which Numbers和which fcn命令,确认当前调用的函数来源,确保调用的是你生成的MEX文件而非原.m文件。 - 排查生成代码内部调用问题
若报错是生成的C代码内部调用Numbers函数时参数传错,直接定位到C代码中Numbers函数的调用位置,补全缺失的9个参数后重新编译MEX即可。
内容的提问来源于stack exchange,提问作者Asia
相关产品推荐
相关产品推荐

