我有以下示例代码。
classdef test < handle
properties
p1;
p2;
p3;
end
methods
function obj=test(p1, p2, p3)
obj.p1=p1;
obj.p2=p2;
if nargin<4
obj.p3=0;
else
obj.p3=p3;
end
end
end
end
现在,如果我这样做
m=test(1,1)
我按预期得到了
m =
test with properties:
p1: 1
p2: 1
p3: 0
另一方面,如果我这样做
n=test.empty([0, 2, 2]);
n(1,1)=test(1,1);
我得到了
Error using test (line 10)
Not enough input arguments.
n(1,1)=test(1,1,1)
也是如此。
我真的好奇这里出了什么问题。显然,如果我提供超过3个参数,那么我得到Too many input arguments.
修改
我正在使用MATLAB R2013a。
答案 0 :(得分:0)
通常你可以使用matlab调试工具来解决这类问题。我复制了你的代码并在第10行放了一个断点来看看发生了什么。
在您的情况下,写入的代码是在执行此行时构造整个对象数组
n(1,1) = test(1,1);
该行将数组的大小从0 x 2 x 2更改为1 x 2 x 2,因此它尝试实例化所有4个对象,并且没有用于初始化最后三个对象的参数。
要解决这个错误,我建议创建一个新方法,我称之为.initialize。
classdef test< handle
properties
p1;
p2;
p3;
end
methods
function obj=test()
end
function initialize(obj,p1,p2,p3)
obj.p1=p1;
obj.p2=p2;
if nargin<4
obj.p3=0;
else
obj.p3=p3;
end
end
end
end
然后,您可以创建数组,实例化对象,然后初始化每个对象。
n = test.empty([0 2 2]);
n(1,1) = test;
n(1,1).initialize(1,1);