2014-12-05 26 views
0

我創建了一個簡單的類來嘗試和了解更多關於MATLAB中的類調用類方法 - 輸入參數太多

下面是我的課。

classdef ClassTest < handle 

methods    
    function t1 = testone(numOne, numTwo) 
     t1 = t2(numOne, numTwo); 
    end 

    function t2 = testtwo(numOne, numTwo) 
     t2 = numOne/numTwo; 
    end 
end 

end 

因此,我使用下面的代碼行創建我的類的實例。

myClass = ClassTest; 

然後我用下面一行調用函數testone。

v = myClass.testone(20,5); 

但是得到錯誤消息「錯誤使用ClassTest/testone輸入參數過多。」我不明白這一點?

我試圖離開5出來,它實際上到了行t1 = t2(numOne,numTwo),但然後不認識到我覺得令人驚訝的函數t2?不遵循這裏發生的事情?

更新

如果我做的方法靜態的我不再獲得大約有其事許多輸入參數但是從功能testone除非我把ClassTest叫時,它不承認testtwo功能的錯誤消息。 testtwo。還是覺得奇怪,我

解決方案

所以玩弄我現在有代碼的工作不過不知道我完全明白髮生了什麼位。

兩個函數應該如下,

function t1 = testone(obj, numOne, numTwo) 
     t1 = obj.testtwo(numOne, numTwo);   
    end 

    function t2 = testtwo(obj, numOne, numTwo) 
     t2 = numOne/numTwo; 
    end 

回答

1

如果你想方法是類的靜態方法,然後將它們定義內的方法阻止如下:

methods (Static) 

然後,您將需要給他們打電話與類名t1 = ClassTest.testone(20,5)t2 = ClassTest.testtwo(20,5)

相反,如果你想他們是類的方法,那麼你將通常具有以下簽名定義它們:

function t1 = testone(obj, numOne, numTwo) 

然後,您可以創建類的實例與myClass = ClassTest並調用t1 = myClass.testone(20,5)

對象myClass傳遞到方法的第一個參數(我一直使用的名字obj作爲第一個參數,但其他與Java約定使用的東西,如this,類推),然後可在整個方法碼。

0

這可能與負載如何MATLAB類的事情。如果您已經在內存中使用了myClass,然後創建/修改了函數定義,那麼您可能會遇到錯誤。

這裏是如何MATLAB涉及更新類的更多細節:http://www.mathworks.com/help/matlab/matlab_oop/modifying-and-reloading-classes.html

嘗試從內存(並作爲最後的手段重新啓動MATLAB)清除所有的變量,然後再試一次。

+0

嗨,我重新啓動我的matlab只是爲了安全,但仍然得到相同的錯誤信息 – mHelpMe 2014-12-05 09:16:28