WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Methode gibt Too many Input Arguments zurück

 

marco-f
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.01.2015, 16:12     Titel: Methode gibt Too many Input Arguments zurück
  Antworten mit Zitat      
Hallo,

Ich bin momentan etwas am verzweifeln mit Matlab und OOP. Rolling Eyes

Folgendes Problem:Matlab gibt mir zurück, dass ich zuviele Variablen eingebe, was aber grober Unsinn ist. Jetzt verstehe ich nicht was das Problem ist. Folgender Code:
Code:
classdef Schedule < handle
    %Defines a schedule
    %Every entry of the vector time represents a time. The successor of an
    %entry represents 15" later, i.e. Time(10)=0:00+9*15"=02:15AM.
    %Entry with the value 0 represent inactivity and 1 activety
    properties
   
Times=zeros(1,24*60/15);
end
methods
    %following merhod will add a time of activity
    function AddOntime(obj,starttime,endtime)
        starting=round(starttime*4)-1;
       ending=round(endtime*4)-1;
        if ending>=starting
            for i=starting:ending
                obj.Times(i)=1;
            end
        end    
    end

...

 


Code:
clc; clear all;
BeleuchtungsPlan=Schedule();
BeleuchtungsPlan.AddOntime(BeleuchtungsPlan,1,2)
 

Ausgabe:
Zitat:
??? Error using ==> AddOntime
Too many input arguments.

Error in ==> test at 3
BeleuchtungsPlan.AddOntime(BeleuchtungsPlan,1,2)


Wo ist das Problem?

Vielen Dank schonmal
Marco
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.01.2015, 16:43     Titel:
  Antworten mit Zitat      
Hallo

du übergibst 2 Mal die Instanz "BeleuchtungsPlan"
Objektinstanz wird automatisch über die Verlinkung übergeben obj.methode(inputparam) das entspricht dann schon methode(obj, inputparam)

Code:

clc; clear all;
BeleuchtungsPlan=Schedule();
BeleuchtungsPlan.AddOntime(1,2) % das entspricht dann schon AddOntime(BeleuchtungsPlan, 1, 2)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
marco-f
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.01.2015, 17:13     Titel:
  Antworten mit Zitat      
Danke für die Antwort.
Erstmal zum Verständnis: "obj" kann ich innerhalb einer Funktion immer nutzen, und das ist dann automatisch das Objekt per dem ich die Methode ausgeführt habe?(Wie "this" in Java?) M-Lint hat mir einen Fehler ausgegeben, weshalb ich den etwas eigensinnigen Syntax wählte.
Wenn ich die Eingabe von obj weglasse bekomme ich leider den selben Fehler angezeigt:
Code:

methods
    %following merhod will add a time of activity
    function AddOntime(starttime , endtime)
        starting=round(starttime*4)-1;
       ending=round(endtime*4)-1;
        if ending>=starting
            for i=starting:ending
                obj.Times(i)=1;
            end
        end    
    end

+
Code:
clc; clear all;
BeleuchtungsPlan=Schedule();
BeleuchtungsPlan.AddOntime(1,2)
 

Zitat:
=
??? Error using ==> AddOntime
Too many input arguments.

Error in ==> test at 3
BeleuchtungsPlan.AddOntime(1,2)

>>


Crying or Very sad

Noch eine andere Idee? Ich meine der Code ist so einfach sturukturiert, ich komme einfach nicht drauf was da falsch seien könnte.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 20.01.2015, 19:20     Titel:
  Antworten mit Zitat      
Hallo

ich habe nicht gemeint dass du die Methode in der Klasse ändern sollst, die war schon richtig. Ich meinte nur den Aufruf, hier ist genauso wie in JAVA wird die Instanz der Klasse über Punkt Verlinkung übergeben.

THIS ist ja in Java ein reserviertes Wort, deswegen auch global in der Klasse verfügbar.
In Matlab wurde das anders gelöst: In der Mehode ist immer der erste Parameter für die Klasseninstanz reserviert, also muss man THIS immer im Funktionskopf zusätzlich mitschreiben, obwohl bei Aufruf wird der Parameter über Verlinkung automatisch übergeben und muss nicht nochmal extra übergeben werden.

also z.B.
Code:

classdef circle < handle
   properties
    radius
   end
   methods
      function this = circle()
      end
     
      function set_radius(this, r)
         this.radius = r;
      end
     
   end
end

 


Dann Aufruf wäre um radius zu setzten
Code:

this = circle();
this.set_radius(15)

 


Aber man kann im Matlab auch so die Klassenmethode aufrufen

Code:

this = circle();
set_radius(this, 15)

 


Also entweder über Verlinkung oder wie normaler Funktionaufruf, aber nicht beides gleichzeitig.
Private Nachricht senden Benutzer-Profile anzeigen
 
marco-f
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.01.2015, 20:29     Titel:
  Antworten mit Zitat      
Vielen Dank, jetzt klappts. Very Happy
Man man man was ich daran gesessen habe ...
Da fällt mir ein Stein vom Herzen.

Vielen Dank nochmal, super Hilfe. Würde dir gerne ein like geben, gibts hier im Forum aber irgendwie nicht.

Erleichterte Grüße
Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.