You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB面向对象编程:MyNode类自引用及多MyService实例实现

解决MATLAB面向对象类定义的非法问题

你的代码里有两个关键问题导致MATLAB报错,我来帮你修正并解释原因:

问题分析

  1. 属性名重复:MyNode类里定义了两个同名的MyService属性,MATLAB不允许类中有重复的属性名称。
  2. 属性名与类名冲突:MyNode类里有一个属性也叫MyNode,这会和类本身的命名冲突,MATLAB禁止这种命名方式。

正确实现代码

首先保持你的MyService类不变(你可以后续补充内部逻辑):

classdef MyService
    % 这里可以添加服务类的属性和方法
    properties
        % 示例:添加服务名称属性
        ServiceName string
    end
    methods
        % 示例构造函数
        function obj = MyService(name)
            if nargin > 0
                obj.ServiceName = name;
            end
        end
    end
end

然后修改MyNode类,给属性起唯一且语义清晰的名字:

classdef MyNode
    properties
        % 邻居节点列表:用明确名称替代原MyNode,避免类名冲突
        NeighborNodes MyNode % 限定属性类型为MyNode对象数组
        % 请求的服务列表:命名为RequestedServices,明确用途
        RequestedServices MyService % 限定为MyService对象数组
        % 提供的服务列表:命名为ProvidedServices,与请求服务区分开
        ProvidedServices MyService % 限定为MyService对象数组
    end
    
    methods
        % 构造函数,用于初始化属性为空数组
        function obj = MyNode()
            obj.NeighborNodes = MyNode.empty(0,1);
            obj.RequestedServices = MyService.empty(0,1);
            obj.ProvidedServices = MyService.empty(0,1);
        end
    end
end

关键修改说明

  • 重命名冲突属性:把原MyNode属性改为NeighborNodes,既避免了和类名的冲突,也让属性用途一目了然。
  • 区分重复属性:将两个MyService属性分别命名为RequestedServices和ProvidedServices,确保属性名唯一,同时清晰表达各自的功能。
  • 属性类型限定:在属性定义时加上MyNode或MyService类型,MATLAB会自动校验赋值的对象类型,避免错误赋值。
  • 构造函数初始化:添加构造函数初始化空数组,防止属性处于未定义状态,后续你可以通过obj.NeighborNodes(end+1) = MyNode();这类方式添加元素。

内容的提问来源于stack exchange,提问作者sajad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:23:04