具有重复名称“ DoBenchmark”的奇怪函数无法定义,因为该函数仅在一个位置定义

时间:2019-05-08 12:24:35

标签: windows matlab mex

(使用最新Windows10下的Matlab 2018b。)我有一个文件夹Folder,其中包含DoStuff.m,其代码为:

%addpath('./SubFolder/SubSubFolder'); // SubSubFolder contains mex file defining myFunction used below
%close all;

function [res] = DoStuff(param) % Function has same name as the script defining it

    res = myFunction(param)

end

其中myFunctionmexw64中包含的'./SubFolder/SubSubFolder'文件中定义。

自然地,在Matlab的GUI(在文件夹Folder中)中执行函数DoStuff(param)会引发以下错误:

'myFunction' is not found in the current folder or on the MATLAB path, but exists in ...
'./SubFolder/SubSubFolder'

...。高超。因此,我在%的第一行中删除了DoStuff.m并重新执行了Matlab GUI(在文件夹Folder中)中的函数DoStuff(param)并得到以下错误:

Function with duplicate name "DoStuff" cannot be defined.

奇怪,因为DoStuff仅在一个位置定义:DoStuff.m脚本内部。 (由which -all DoStuff中的Matlab中的Folder确认。)

注释。在Matlab2018b中,可以在名为toto的脚本中定义名为toto.m的函数,Matlab不会有任何问题它。因此,我的问题与相同的命名无关。它与添加addpath行有关,但我不知道如何做。这种感觉的确认:用res = myFunction(param)替换行res = 1并取消注释addpath也会导致命名错误。

1 个答案:

答案 0 :(得分:3)

如果函数在脚本文件中,则m文件的名称必须与函数的名称不同。也就是说,如果DoStuff.m不是功能文件,则您的m文件名不能为DoStuffDoStuff.m都应该是这样的函数文件:

function [res] = DoStuff(param) % Note that there is no executable line before this
res = myFunction(param)
end

,否则您应该重命名函数或m文件。

假设您重命名m文件,则可以这样使用它:

addpath('./SubFolder/SubSubFolder'); %SubSubFolder contains mex file defining myFunction
close all;

res = DoStuff(param); %Calling the function

function [res] = DoStuff(param)
res = myFunction(param)
end