2015-06-21 91 views
0

親愛的可愛社區,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

回答

2

您的構造函數應該由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

相關問題