Почему MATLAB жалуется, что «запрещает использовать одно и то же имя ... как функцию и переменную»? - PullRequest
1 голос
/ 10 марта 2011

Хе, ребята. Хорошо. Я сделал это кодирование. Но, похоже, есть ошибка. Может кто-нибудь объяснить мне, почему есть ошибка? Это кодировка:

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

Произошла ошибка:

??? При компиляции «стоимость» была определена как переменная, и это переменная неинициализирована. «стоимость» также является именем функции и предыдущих версий MATLAB вызвал бы функцию. Тем не менее, MATLAB 7 запрещает использование того же имени в том же контекст как функция и переменная.

Ошибка в ==> fyp_editor> Mybutton_Callback в 131 если размер (стоимость, 1) == 1

Ошибка в ==> gui_mainfcn на 96 feval (varargin {:});

Ошибка в ==> fyp_editor at 42 gui_mainfcn (gui_State, varargin {:});

Ошибка в ==> @ (HObject, данныеСобытие) fyp_editor ( 'Mybutton_Callback', hObject, данныеСобытие, guidata (hObject))

??? Ошибка при оценке обратного вызова uicontrol

Ответы [ 2 ]

4 голосов
/ 10 марта 2011

Вероятная проблема, с которой вы столкнулись, заключается в том, что costA не является пустым, поэтому none вашего вложенного кода будет оценено, и переменная cost никогда не будет инициализирована ни перед чем, прежде чем вы вызовете строкуif size(cost,1) == 1.Возможно, вы захотите заказать вложенные операторы if примерно так:

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.Когда вы определяете переменную с тем же именем, что и у функции, переменная имеет приоритет и будет использоваться вместо функции всякий раз, когда это имя используется в любых вычислениях.

Даже если cost не инициализируется ни к чему в вашем состоянии, MATLAB по-прежнему распознает, что это может быть переменной в вашей функции и, следовательно, (в MATLAB 7 или новее) не пытается вызвать функция cost.По-видимому, в более старых версиях MATLAB вызывал теневую функцию в случае, если переменная с тем же именем неинициализирована.

0 голосов
/ 10 марта 2011

Похоже, ошибка говорит о том, что переменная cost является зарезервированным словом.Это означает, что вы не можете использовать это имя в качестве переменной.

Попробуйте переименовать cost во что-то другое, например finalCost.

...