Как создать массив объектов в классе контейнера в Matlab - PullRequest
1 голос
/ 07 мая 2020

У меня есть класс MyData и класс Container

classdef MyData < handle
    properties
        x
    end

    methods
        function obj=MyData()
            obj.x=0;
        end
    end
end
classdef Container < handle
    properties
        myobject_array
    end

    methods
        function obj=Container(n)
            obj.myobject_array(n)=MyData();
        end
    end
end

Когда я хочу создать объект Container с помощью Container(3), выдается следующая ошибка

The following error occurred converting from MyData to double:
Conversion to double from MyData is not possible.

Error in Container (line 8)
            obj.myobject_array(n)=MyData();

Как я могу написать конструктор Container, чтобы создать массив из MyData объекта в Container объекте?

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Измените конструктор Container:

classdef Container < handle
    properties
        myobject_array
    end

    methods
        function obj = Container(n)
            MyObjectArray(n,1) = MyData;
            obj.myobject_array = MyObjectArray;
        end
    end
end

или:

classdef Container < handle
    properties
        myobject_array
    end

    methods
        function obj = Container(n)
            obj.myobject_array = MyData.empty;
            obj.myobject_array(n,1) = MyData();
        end
    end
end

>> c = Container(3);
>> c.myobject_array

ans = 

  3×1 MyData array with properties:

    x
1 голос
/ 07 мая 2020

Другое решение - указать для свойства значение по умолчанию:

classdef Container < handle
    properties
        myobject_array = MyData;
    end

    methods
        function obj=Container(n)
            obj.myobject_array(n) = MyData;
        end
    end
end

(обратите внимание, что вам не нужно указывать пустые скобки, MyData совпадает с MyData(). Это традиционно в MATLAB, чтобы не добавлять пустые скобки.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...