2013-01-07 49 views
2

爲什麼我會得到一個錯誤:爲什麼傳遞適當的參數時會出現「輸入參數太多」錯誤?

??? Error using ==> ensureCellType Too many input arguments.

Error in ==> usage_dynamicVariableNaming at 11 result = dataHolder.ensureCellType(str);

時,我傳遞的參數正確的號碼?

% USAGE: 

clear all; 
clc; 

elementNames = {'area_12345[<>]6789', 'apollo123', 'guruX', 'ok'}; 
elementTypes = {'string', 'specialChar', 'int', 'float'}; 
elementValues = {'charlie', 'vvv', '09', '123.321'}; 

dataHolder = dynamicVariableNaming; 

str = 'test'; 
result = dataHolder.ensureCellType(str); 


%% CLASS 
classdef dynamicVariableNaming 
%HELLO Summary of this class goes here 
% - 

    properties   
      variableNames = [];   

      variableValues = []; 
      variableTypes = []; 
    end 

    methods (Access = public) % (Access = private) 
      function obj = dynamicVariableNaming (variableName, variableValue, variableType) 
      % class constructor 
       if(nargin > 0) 
       obj.variableNames = variableName;     

       obj.variableValues = variableValue; 
       obj.variableTypes = variableType; 
       end 
      end 
% end 
%    
% methods (Static = true) 
      function addVariables (obj, variableName, variableValue, variableType) 
       obj.variableNames = [obj.variableNames ensureCellType(variableName)];     

       obj.variableValues = [obj.variableValues ensureCellType(variableValue)]; 
       obj.variableTypes = [obj.variableTypes ensureCellType(variableType)]; 
      end    

      function cellData = ensureCellType(value)  
      if (class(value) ~= 'cell') 
       cellData = cell2string(value); 
      else 
       cellData = value; 
      end 
      end    

    end 
end 

感謝您的幫助很大。 它現在運行,但未插入數據。

我開始了一個新的線程在這個新的問題: The data is not inserted successfully into object

回答

6

除非你打算ensureCellType是一個靜態方法(在這種情況下,你應該(Static=true)聲明它,你應該給它簽名cellData = ensureCellType(obj,value)obj給你在方法中引用了對象本身

你看到的錯誤是你看到的,因爲MATLAB傳遞了對象本身和value到你的方法中,這是兩個輸入參數而不是一個。

如果您在方法中永遠不需要對obj的引用,則可以聲明方法簽名爲cellData = ensureCellType(~, value)。然後MATLAB會知道它應該有兩個輸入,但它可以忽略第一個輸入。

+2

addVariables()仍然給出錯誤。 ================================================ ====== ???錯誤使用==> addVariables 輸入參數太多。 錯誤==> usage_dynamicVariableNaming at 14 dataHolder.addVariables(dataHolder,elementNames(i),elementTypes(i),elementValues(i)); –

+1

您需要將方法簽名定義爲'output = methodName(obj,otherInputs)',但您需要將您的方法調用爲'output = obj.methodName(otherInputs)'。 'obj'作爲第一個輸入參數在_implicitly_中傳遞 - 如果直接傳遞它,將會有一個額外的輸入參數給出您看到的錯誤。 –

相關問題