为何同父类不同子类对象无法存入MATLAB数组?
MATLAB异构数组创建失败问题解决
问题根源
你遇到的错误是因为MATLAB默认不会自动将同父类的子类对象构建为异构数组。当执行[A,B]时,MATLAB会尝试把第二个对象转换成第一个对象的类型(也就是Agent_XY),而非将数组类型提升为父类Agent。要让MATLAB支持异构数组,父类必须显式继承matlab.mixin.Heterogeneous类——这是创建异构数组的硬性要求。
修复方案
1. 修改完整代码中的父类Agent
把父类的定义改成如下形式,添加matlab.mixin.Heterogeneous继承:
classdef Agent < handle & matlab.mixin.Heterogeneous properties inventory_X inventory_Y inventory_Z end methods function obj = Agent(inventory_x,inventory_y,inventory_z) obj.inventory_X = inventory_x; obj.inventory_Y = inventory_y; obj.inventory_Z = inventory_z; end end end
2. 修改最简复现代码中的父类Agent
同样给父类添加异构支持:
classdef Agent < handle & matlab.mixin.Heterogeneous end
修改后再执行Array = [A,B]或C=[A,B],就能生成类型为Agent的异构数组,两个子类对象会被正确存入数组中。
额外说明
- 异构数组的整体类型是父类Agent,但每个元素依然保留自身的子类类型,你可以用
isa或class函数验证这一点。 - 之前的报错本质是MATLAB尝试把Agent_XZ转成Agent_XY,但两个子类之间没有定义转换规则,调用构造函数时参数不匹配,因此抛出参数错误。
内容的提问来源于stack exchange,提问作者TheAngryToad
相关产品推荐
相关产品推荐

