2017-02-03 3 views
1

У меня есть эта функция, которая принимает координаты строки/столбца изображения и возвращает направления, с которыми изменяются соседние пиксели. ВызовСообщение об ошибке: «Выходной аргумент (и, возможно, другие), не назначенный во время вызова функции«

function [d] = p_directions(row, col, img) 

if img(row, col+1) == 2 
    if img(row, col) == 3 
    d = 'A+'; 
    elseif img(row, col) == 1 
    d = 'B+';  
    elseif img(row, col) == 2 
    d = NaN; 
    end 
end 

if img(row, col) == 2 
    if img(row, col+1) == 3 
    d = 'A-'; 
    elseif img(row, col+1) == 1 
    d = 'B-'; 
    end 
end 
end 

функции: сообщение

[row, col] = find_row_col(A); [d] = p_directions(row, col, img)

Ошибки:

Error in p_directions (line 15) if img(row, col + 1) == 2

Output argument "d" (and maybe others) not assigned during call to "p_directions".

Я хотел бы верить, что ошибка исходит от й (строка 15), и в этом случае переменная 'd' даже не вычисляется. Я новичок в программировании, и я понятия не имею, что на самом деле может быть неправильно с первой строкой моего скрипта функции? Пожалуйста, помогите, предложения или рекомендации по этому поводу? Заранее спасибо.

ответ

1

Проблема заключается в том, что ваша функция p_directions присваивает значение d, если выполнено какое-либо из ваших вложенных условий if. Вы не присвоили значение «по умолчанию» для возврата, если ни одно из них не является истинным.

Ваши два блока условий начинаются с if img(row, col+1) == 2 и if img(row, col) == 2 соответственно. Что, если ни одно из них не является истинным, поскольку оба img(row,col) и img(row,col+1) не 2? Тогда d не будет иметь значения, и Matlab не знает, что вернуть. Отсюда и ошибка.

2

Это один случай, когда ошибка говорит все это ...

Вы должны указать значение по умолчанию для d. Обычно вы выбираете значение, чтобы, когда оно было возвращено, вы знаете, что что-то пошло не так. Таким образом, непосредственно после вызова функции, вы могли бы рассмотреть вопрос о том, как что-то

d = -1 

или вы можете добавить другого заявления ...

if 
    ... 
else 
    d = -1 

Проблема заключается в том, что вы будете только когда-либо попасть в ваши if отчетности, если значение img равно 2 в любой из указанных вами точек. Если это не так, возвращаемое значение никогда не будет присвоено.

+0

Большое спасибо всем. Я исправил это сейчас с помощью друга. На самом деле проблема заключалась в цикле, в котором вызывается функция. Что касается ваших комментариев, вы абсолютно правы, так как это было бы так, даже если бы цикл был правильным. Наверное, я только что узнал об этой ошибке. – User1772