2015-07-17 4 views
1

Это кажется очень глупым вопросом, потому что сообщение об ошибке действительно прямолинейно, поэтому я потратил некоторое время, чтобы создать как можно более полный пример, насколько я мог. Кажется, что когда конструктор вызывается в конструкторе (я думаю, что я впервые заметил в обычном методе, а не в качестве конструктора), и объекты помещаются в массив в обратном порядке, тогда matlab будет давать not enough input arguments error, например:Недостаточно входных аргументов, когда заданы входы

называется

practice(4)

дает

b = 

    4 


b = 

    2 


b = 

    0 

Error using practice (line 4) 
Not enough input arguments. 

Error in practice (line 7) 
        s(i) = practice(b-i); 

Error in practice (line 7) 
        s(i) = practice(b-i); 

Этот случай странно, потому что он только терпит неудачу, когда добирается до b < = 1, но мой настоящий код не терпит неудачу. Любые идеи о том, что именно происходит неправильно и как я могу это исправить?

+0

На самом деле конструктор не может иметь экземпляр как первый метод, но не является статическим. – Hovestar

ответ

1

Я думаю, что проблема на первой итерации, когда b = 4, вы установили s(i) = practice(b-i) и i = 2. Это приведет к инициализации s массиву practicelength 2, но поскольку вы сначала инициализируете второй элемент, первый элемент будет инициализирован по умолчанию practice, где вход b не определен.

Если вы измените индексы на i, итерации равны i = 1:2, это должно устранить проблему.

Edit:

Например, попробуйте очистить рабочее пространство, а затем делать:

s(2) = practice(0)

Это попытка присвоить practice(0) к s(2), а затем s(1) получит назначается по умолчанию инициализируется practice , и в этом случае b не определен. Это повторит проблему, с которой вы сталкиваетесь. Решение состоит в том, чтобы сначала назначить s(1), а затем s(2).

Смежные вопросы