How to initialize an object array as a class property?

Here are two code snippets illustrating my problem:
classdef SomeClass
properties
foo;
bar;
end
end
and in another file:
classdef SomeOtherClass
properties
%Array of SomeClass objects.
someClassArray;
end
methods
function obj = SomeOtherClass(n)
%Initialize the array, as n can be large.
obj.someClassArray(n,1) = SomeClass();
end
end
end
When initializing an object of the second class, Matlab assusmes the someClassArray property is a double, and gives an error:
The following error occurred converting from SomeClass to double:
Conversion to double from SomeClass is not possible.
Error in SomeOtherClass (line 10)
obj.someClassArray(n,1) = SomeClass();
How do I get around this?

 채택된 답변

Matt J
Matt J 2018년 4월 20일
편집: Matt J 2018년 4월 20일
      methods
         function obj = SomeOtherClass(n)
               tmp(n,1)=someClass;
              obj.someClassArray=tmp;
          end
      end

댓글 수: 2

I have been experiencing the same problem, and this approach also solves my problem. I am wondering though why it is necessary, or why it works when simply initializing the property value directly i.e
obj.someClassArray(n,1) = SomeClass();
doesn't work.
It's because of how property default values are determined. See the "Property Default Values" section on this documentation page for more information.
I'd probably solve this by making someClassArray either a scalar SomeClass object or an empty SomeClass object array (like Prop4 in the documentation section I referenced above.)
But be careful with this if you initialize a property value to an instance of a handle class. See the "Initializing Properties to Handle Objects" section on that same documentation page.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

질문:

2018년 4월 20일

댓글:

2022년 7월 21일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by