Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 作为属性的对象数组_Matlab_Class_Properties_Default Value - Fatal编程技术网

Matlab 作为属性的对象数组

Matlab 作为属性的对象数组,matlab,class,properties,default-value,Matlab,Class,Properties,Default Value,我知道如何初始化对象数组: arrayOfA(3,2) = ClassA(); for i = 1:3 for j = 1:2 arrayofA(i,j) = ClassA(...); end end 但当我为一处房产尝试这一点时: classdef ClassB properties arrayOfA; ... end methods %% Constructor function b = ClassB(...)

我知道如何初始化对象数组:

arrayOfA(3,2) = ClassA();

for i = 1:3
    for j = 1:2
        arrayofA(i,j) = ClassA(...);
    end
end
但当我为一处房产尝试这一点时:

classdef ClassB

properties
    arrayOfA;
    ...
end

methods
    %% Constructor
    function b = ClassB(...)
        b.arrayOfA(3,2) = ClassA();  % Error!
        ...
    end
end
我得到的异常
无法从ClassA转换为double。

我知道,当未提供属性的默认值时,它会初始化为一个空的双精度数组。这解释了异常情况,但是如何设置
arrayOfA
的默认值,以便用对象填充它?

我试过:

properties
    arrayOfA(3,2) = ClassA;
但这会产生异常
不平衡或意外的括号或括号。



编辑:我正在使用MATLAB R2015b,这会影响解决方案-请参见下文。

arrayOfA
的属性定义中,您应该能够将其设置为:

properties
    arrayOfA = ClassA.empty
end

empty
是所有非抽象类的内置方法。它会将数组初始化为
ClassA
的空数组,而不是双精度的空数组。

从R2016a版本开始,您可以这样:

注意没有
=
符号。这将要求分配给此属性的值必须是任何大小的
ClassA

从R2017a版本开始,还可以限制大小:


查看UndocumentedMatlab,了解如何限制属性的类,以及。您使用的是什么版本的MATLAB?@gnovice R2017a(64位)和R2015b(32位),在不同的情况下。@Phydeaux:我认为Dev iL上面提到的和下面提到的更新的类行为是在2016年的某个时候引入的,但我不完全确定。如果是这样,它只会在你的2017个版本中使用。@ PyDeAux:……但是,下面山姆使用的答案应该在这两个方面都起作用,如果这是你需要的。虽然我认为这是最好的解决方案,但不幸的是,我已经证实它不适用于至少一个版本的Matlab,我不得不使用它。非常感谢您的回答。请注意,此方法仅指定类型,并且始终将数组初始化为大小为0x0。您可能希望初始化为不同的空大小,例如,您可能知道数组将始终有两列,在这种情况下,您可能希望将其初始化为0x2。为此,您需要使用
empty
方法,用
ClassA.empty(0,2)
调用它。
classdef ClassB
properties
  arrayOfA ClassA
  ...
end
methods
  % Constructor
  function b = ClassB(...)
    b.arrayOfA(3, 2) = ClassA();
    ...
  end
end
classdef ClassB
properties
  arrayOfA(3, 2) ClassA
  ...
end
...