我将在MatLab中定义一个名为“Node”的类,它应该是树结构的一个节点。我在它里面有一个名为“NodeList”的变量,它应该是一个子节点列表。
以下是我的定义:
classdef Node
properties
Title string %name
NodeType Type_Node %enum Design/Variation
NodeList cell{Node} %list of sub nodes
RelationType Relation %enum AND/OR
ImportanceFactor float %float [0 1]
NodeIndex {mustBePositive} %int for drawing the tree
end
methods
function obj=Node(title,nodetype,nodelist,relation,impactfactor,nodeindex)
obj.Title=title;
obj.NodeType=nodetype;
obj.NodeList=nodelist;
obj.RelationType=relation;
obj.ImportanceFactor=impactfactor;
obj.NodeIndex=nodeindex;
end
end
end
在示例化类时,我收到以下错误消息:
Error setting default value of property 'NodeList' of class 'Node'. The 'Node' class
definition uses an instance of itself directly
or indirectly as the default value for the 'NodeList' property. This is not allowed.
首先,请让我知道我用来定义类的语法是否正确。
然后,我会感激任何建议,以制作一个类的示例列表。
第三,我如何才能在类本身中嵌套一个示例列表?
1条答案
按热度按时间shstlldc1#
将此作为下一步尝试。(为了方便起见,我简化了课程)
现在,这些都起作用了:
我所做的更改:
1.
NodeList
验证器只针对Node
类,而不是cell{Node}
。这仍然允许类的标准数组。(如果需要,您可以对阵列单独设置大小限制。[1])1.我添加了一个0参数构造函数,它是自引用的。(我也可以使用一个常量
NullNode
对象放入此处,这取决于项目中的意义。示例在代码中定义。)1.我从
handle
派生了这个类。(这并不是回答您最初的问题所必需的。然而,根据样例代码的上下文,我怀疑这更接近您预期的行为。)[1][https://www.mathworks.com/help/matlab/matlab_oop/defining-properties.html](https://www.mathworks.com/help/matlab/matlab_oop/defining-properties.html)(参见“属性验证语法”)