2013-04-20 2 views
1

Я пытаюсь создать массив объектов класса Cell в другом классе System in MATLAB. The class Cell` является:создать массив объектов класса в другом классе MATLAB

classdef Cell 
properties 
    ID; 
    EntityID; 
    ZoneID; 
    NeighborID; 
    State; 
    nextChangeTime; 
end 

methods 
% Define the constructor 
    function obj = Cell() 
     obj.ID = zeros(1); 
     obj.EntityID = zeros(1); 
     obj.ZoneID = zeros(1); 
     obj.NeighborID = zeros(1); 
     obj.State = zeros(1); 
     obj.nextChangeTime = zeros(1); 
    end 
end 

Теперь у меня есть еще один класс System. Я пытаюсь сделать массив Cell объектов, как это:

classdef System 
    properties 
    Cells; 
    end 

    methods 
    function obj = System(dimx,dimy) 
     obj.Cells(dimx,dimy) = Cell(); 
    end 
    end 

Но я думаю, что я использую неправильный формат. Не уверен, что это возможно. Любые предложения о том, как это сделать, будут оценены.

ответ

2

Для создания массивов объектов пользовательского класса (например, Cell) удобно иметь конструктор по умолчанию для пользовательского класса. Конструктор по умолчанию - это тот, который не принимает аргументов (т. Е. Когда nargin==0). При создании массивов неявная инициализация объектов массива выполняется этим конструктором. Если этот конструктор отсутствует, попытка создания массивов путем «расширения» скалярного объекта приведет к ошибке.

Другим способом создания массивов объектов (без определения конструктора по умолчанию) является использование horzcat, vertcat и cat.

Aaaaand ... при получении доступа к свойствам объекта, не забудьте указать объект, который вы получаете доступ:

obj.Cells = Cell.empty(0,0); % Force the type of empty Cells to Cell class 
obj.Cells(dimx,dimy) = Cell(); 
+0

Так что у меня конструктор по умолчанию для Электролизера. Но когда я пытаюсь выполнить оператор 'obj.Cells (dimx, dimy) = Cell();' он говорит, что преобразование в double из Cell невозможно. – Nitin

+0

Я скорректировал код, пожалуйста, загляните в мой пост снова. По-видимому, тип по умолчанию для свойства empty равен double. Мы должны изменить его на Cell. – 2013-04-20 20:49:44

+0

Спасибо. работает сейчас! – Nitin

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