MATLAB:创建对象数组时,构造函数中没有足够的输入参数

时间:2014-08-27 18:28:55

标签: matlab

我有以下示例代码。

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。

1 个答案:

答案 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);