Matlab类中结构体存入空双精度数组报错问题求助
解决MATLAB类中结构体数组属性赋值报错问题
这个问题我太熟了——MATLAB类的属性默认类型坑了不少人!咱们一步步来拆解解决:
错误根源
你的children属性在定义时没有指定初始值或类型,MATLAB会默认把它初始化为空的双精度数组(double array)。当你执行obj.children(end + 1) = newSet;时,相当于试图把结构体塞进双精度数组里,两种类型完全不兼容,自然就触发了"Conversion to double from struct is not possible"的报错。
两种快速修正方案
方案一:初始化属性为空结构体数组
在properties块里给children设置初始值为struct(),直接告诉MATLAB这个属性是结构体数组类型:
properties children = struct() % 关键:初始化为空结构体数组 end
方案二:明确指定属性类型为struct
直接在属性定义时声明类型,效果和方案一一致,写法更简洁:
properties children struct % 明确属性类型为结构体 end
修正后的完整示例代码
把上面的改动加入你的类,代码就能正常运行了:
classdef YourClassName properties children = struct() % 这里是核心改动 end methods function obj = Init(obj, valueList) %INIT 用新参数集向量初始化 newSet = obj.ParamSet; newSet.values = valueList; obj.children(end + 1) = newSet; % 现在类型匹配,不会报错 end end methods(Static) function paramset = ParamSet() newset.('values') = []; newset.('fitness') = 0; paramset = newset; end end end
额外小建议:如果你的ParamSet结构体字段是固定的,其实可以考虑用classdef定义一个专门的类来替代普通结构体,这样代码的可读性和类型安全性会更高哦!
内容的提问来源于stack exchange,提问作者Matthias Pospiech
相关产品推荐
相关产品推荐

