开发者

Why does MATLAB complain it "forbids the use of the same name ... as both a function and a variable"?

Hye guys. Okay. I have done this coding. But it seems have error. Can anyone explain to me why there is an error? This is the coding:

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');

This is the error occured:

??? At compila开发者_如何学编程tion, "cost" was determined to be a variable and this variable is uninitialized. "cost" is also a function name and previous versions of MATLAB would have called the function. However, MATLAB 7 forbids the use of the same name in the same context as both a function and a variable.

Error in ==> fyp_editor>Mybutton_Callback at 131 if size(cost,1) == 1

Error in ==> gui_mainfcn at 96 feval(varargin{:});

Error in ==> fyp_editor at 42 gui_mainfcn(gui_State, varargin{:});

Error in ==> @(hObject,eventdata)fyp_editor('Mybutton_Callback',hObject,eventdata,guidata(hObject))

??? Error while evaluating uicontrol Callback


The likely problem you're having is that costA is not empty, so none of your nested code gets evaluated and the variable cost will never be initialized to anything before you call the line if size(cost,1) == 1. You probably want to order your nested if statements something like this:

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

The explanation for the unusual error you're getting is that cost appears in your code as a variable, but there appears to be a function with the name cost as well. When you define a variable with the same name as a function, the variable takes precedence and will be used instead of the function whenever that name is used in any computations.

Even though cost doesn't get initialized to anything in your condition, MATLAB still recognizes that it could be a variable in your function and thus (in MATLAB 7 or newer) it doesn't try to call the function cost. Apparently, in older versions MATLAB would call the shadowed function in the event that a variable by the same name is uninitialized.


It looks like the error is saying that the cost variable is a reserved word. This means you can't use this name as a variable.

Try renaming cost to something else, like finalCost.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜