Вы путаете свойство names со свойством спецификации класса (которые не требуются в MATLAB).В коде, который вы написали, вы получите поля с именем из MyNode
и MyService
, что позволит MATLAB предположить, каким должен быть тип данных (вероятно, double
при неинициализированном, а не то, что вы хотели).
Чтобы это исправить, прочитайте страницу документации по проверке значений свойств .Вы обнаружите, что способ указания класса для свойств / полей осуществляется с использованием следующего синтаксиса:
В вашем случае это может выглядеть следующим образомthis:
classdef MyNode
properties
neighbors(:,1) MyNode % List of neighbor Nodes
% ^ name ^ size ^ class
rService(1,1) MyService % List of services that I request
pService(1,1) MyService % List of services that I provide
end
end
Я бы также посоветовал добавить к вашим классам несколько конструкторов .
Наконец, я хотел бы отметить, что я протестировал приведенное выше определение рекурсивного классав R2018a.Если ваша версия MATLAB довольно старая (до R2016a), вы можете использовать только синтаксис, упомянутый здесь , примерно:
<varName>@<class> <scalar/vector/matrix> = <initial value>;