Matlab - 构造函数不会初始化成员值

问题描述:

亲爱的可爱社区,Matlab - 构造函数不会初始化成员值

我已经看过谷歌和论坛,也发现了一些有趣的帖子。但最终我仍然没有得到它的工作。所以,我会在这里发布这个问题。我知道在Matlab中已经实现了get/Set方法,但我使用的是对象,因此我不明白在哪里实现它们。

总体结构:

+Measurement\MeasurerIF 
+Measurement\MeasurerComponent 

在我的界面我宣布我的功能我想实现这个接口还抽象。它看起来像这样:

classdef MeasuererIF < handle 

methods (Abstract=true) 

    getStatus(cObj) ; 
    setStatus(cObj,iStatus) ; 
    getInfo(cObj) ; 
    setInfo(cObj,sInfo) ; 
end 

然后,我创建了其他类MeasurerComponent中,我实现的方法,也是构造:

classdef MeasurerComponent < PerformanceMeasurement.MeasuererIF 
%% MeasurerComponent: Evaluates which model is used and contains them as childs. 
% Detailed explanation goes here 

properties (Access=protected) 
    miStatus; 
    msInfo; 
    mcData; 
end 

methods 

    %constructor 
    function cObj = PerformanceMeasurement.MeasurerComponent ; 

     cObj.miStatus = -1 ; 
     cObj.msInfo = 'Import' ; 
     cObj.mcData = [] ; 
    end 


    %Status 
    function setStatus(cObj,iStatus) 

     cObj.miStatus = iStatus; 
    end 

    function iStatus = getStatus(cObj) 

     iStatus = cObj.miStatus; 
    end 

    %Info 
    function setInfo(cObj,sInfo) 

     cObj.msInfo = sInfo; 
    end 

    function sInfo = getInfo(cObj) 

     sInfo = cObj.msInfo ; 
    end 

end 

早些时候,我只是使用了get方法并且最近添加了set方法,现在它不再工作了。问题是当我创建一个对象时

obj = Measurement.MeasurerComponent 

程序不会再初始化这些值。

For a = obj.getInfo; 

我只接收[]

是否有人有一个想法,为什么它不会再初始化?在收到提示后,由于句柄类,我将初始化过程更改为构造函数。

我真的很感激,很高兴每个提示和提示! Cheers

您的构造函数应该由function cObj = MeasurerComponent定义,而不要使用PerformanceMeasurement前缀。这只是在Matlab中定义和使用包的方式 - 如果在包外部使用类但不在包内部,则添加前缀(在此解释为:“请注意,定义不使用包前缀”) - http://uk.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html?refresh=true )。

此外,您有一个错字 - 您的抽象父类文件被称为+Measurement\MeasurerIF,但在定义中它会拼写它MeasuererIF。不管它被调用的是哪一个,但是类的名称必须与文件名匹配!

如果我纠正了这两个问题,那么你的代码变得

+Measurement\MeasurerIF

classdef MeasurerIF < handle 

    methods (Abstract=true) 

     getStatus(cObj) 
     setStatus(cObj,iStatus) 
     getInfo(cObj) 
     setInfo(cObj,sInfo) 
    end 
end 

+Measurement\MeasurerIF

classdef MeasurerComponent < Measurement.MeasurerIF 
    %% MeasurerComponent: Evaluates which model is used and contains them 
    %% as childs. 

     properties (Access=protected) 
     miStatus 
     msInfo 
     mcData 
    end 

    methods 

     %constructor 
     function cObj = MeasurerComponent 

      cObj.miStatus = -1 ; 
      cObj.msInfo = 'Import' ; 
      cObj.mcData = [] ; 
     end 


     %Status 
     function setStatus(cObj,iStatus) 

      cObj.miStatus = iStatus; 
     end 

     function iStatus = getStatus(cObj) 

      iStatus = cObj.miStatus; 
     end 

     %Info 
     function setInfo(cObj,sInfo) 

      cObj.msInfo = sInfo; 
     end 

     function sInfo = getInfo(cObj) 

      sInfo = cObj.msInfo ; 
     end 

    end 
end 

,如果我键入以下内容:

obj = Measurement.MeasurerComponent; 
obj.getInfo 

然后我回去

ans = 

Import 

这是我的期望。

+0

非常感谢。不知道这个前缀是没有必要的。这可以帮助我解决很多问题,并且您提供的链接非常有帮助。目前无法测试,但白天我会给你更准确的反馈。但肯定会这样。所以,非常感谢你为我的问题花费在星期天的时间!你很棒! 与拼写错误的问题是,我写入的计算机不是我的matlab安装的那个,所以我从内存中写下来。不幸的是我写了一个错误。在文件中没有错别字。 – luftfahrt

+0

你好汤姆!我只是能够实施你的建议,一切工作都很好!我很乐意赞扬你,但是我的声誉太小,所以在文本形式:谢谢你! – luftfahrt

+0

没问题!很高兴能为您提供帮助,祝您的Matlab编程顺利! – Tom