为什么MATLAB抱怨它“禁止使用相同的名称......作为函数和变量”?

时间:2011-03-10 20:13:20

标签: user-interface uitableview matlab matlab-guide

Hye伙计们。好的。我做了这个编码。但似乎有错误。任何人都可以向我解释为什么会有错误?这是编码:

Hcurve = cell2mat(get(handles.Mytable3,'Data'));
costA = cell2mat(get(handles.Mytable1,'Data'));
cost1 = str2num(get(handles.input2_editText,'String'));
cost2 = str2num(get(handles.input3_editText,'String'));
cost3 = str2num(get(handles.input4_editText,'String'));
cost4 = str2num(get(handles.input5_editText,'String'));
limit = cell2mat(get(handles.Mytable2,'Data'));
Pdt = str2num(get(handles.input1_editText,'String'));

if isempty(costA)

    if size(Hcurve,1) == 2

        H1 = Hcurve(1,:)*cost1;
        H2 = Hcurve(2,:)*cost2;
        H = num2cell([H1;H2]);
        set(handles.Mytable1,'Data',H)
        cost = cell2mat(get(handles.Mytable1,'Data'));

    else if size(Hcurve,1) == 3 

        H1 = Hcurve(1,:)*cost1;
        H2 = Hcurve(2,:)*cost2;
        H3 = Hcurve(3,:)*cost3;
        H = num2cell([H1;H2;H3]);
        set(handles.Mytable1,'Data',H)
        cost = cell2mat(get(handles.Mytable1,'Data'));

    else if size(Hcurve,1) == 4 

        H1 = Hcurve(1,:)*cost1;
        H2 = Hcurve(2,:)*cost2;
        H3 = Hcurve(3,:)*cost3;
        H4 = Hcurve(3,:)*cost4;
        H = num2cell([H1;H2;H3;H4]);
        set(handles.Mytable1,'Data',H)
        cost = cell2mat(get(handles.Mytable1,'Data'));

        else 

        cost = costA;

        end
        end
    end
end


if size(cost,1) == 1

    set(handles.text8,'String','At Lease Two Generators');

发生错误:

???在编译时,“成本”被确定为变量而且这个  变量未初始化。 “cost”也是函数名称和以前的版本  MATLAB会调用该函数。  但是,MATLAB 7禁止在同一名称中使用相同的名称  上下文既是函数又是变量。

==>中的错误fyp_editor> Mybutton_Callback at 131     如果尺寸(成本,1)== 1

==>中的错误gui_mainfcn at 96         feval(varargin {:});

==>中的错误fyp_editor在42岁     gui_mainfcn(gui_State,varargin {:});

==>中的错误 @(hObject,EVENTDATA)fyp_editor( 'Mybutton_Callback',hObject,EVENTDATA,guidata(hObject))

???评估uicontrol回调时出错

2 个答案:

答案 0 :(得分:4)

您可能遇到的问题是costA不为空,因此您的嵌套代码的 none 将被评估,变量cost将永远不会被初始化为任何内容在你拨打专线if size(cost,1) == 1之前。您可能想要订购nested if statements这样的内容:

if isempty(costA)  %# If costA is empty, compute a value for cost

  if size(Hcurve,1) == 2
  ...
  elseif size(Hcurve,1) == 3
  ...
  elseif size(Hcurve,1) == 4
  ...
  end

else
  cost = costA;  %# Will set cost equal to costA if it is not empty
end

您遇到的异常错误的解释是cost在您的代码中显示为变量,但似乎有一个函数名称cost也是。当您定义与函数同名的变量时,只要在任何计算中使用该名称,就会使用variable takes precedence代替函数。

即使cost没有被初始化为你的条件中的任何东西,MATLAB仍然认识到可能是你函数中的一个变量,因此(在MATLAB 7或更新版本中)它不会尝试调用函数 cost。显然,在旧版本中,如果同名变量未初始化,MATLAB将调用阴影函数。

答案 1 :(得分:-1)

看起来错误是说cost变量是保留字。这意味着您不能将此名称用作变量。

尝试将cost重命名为其他内容,例如finalCost