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

In Array Objekte erzeugen, dann kopieren

 

HansPoffer
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 26.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2009, 12:41     Titel: In Array Objekte erzeugen, dann kopieren
  Antworten mit Zitat      
Hallo zusammen,

ich bin auf dieses Forum gestoßen, nachdem ich seit 2 Tagen das Internet nach einer Lösung und meine Bekannten durchwühle.

Ich habe eine Klasse

Code:

classdef Systemelement
    %
    % Systemelement Weibullverteilt
   
    properties
  (...)      
               
    end
   
    properties (SetAccess=private)
       b_ausfall                                                 %b_ausfall % b Weibull-Parameter Ausfall
       t_0_ausfall                                              % Ausfallfreie Zeit
       T_ausfall                                                 % charakteristische Lebensdauer
       
       b_reparatur                                             % b Weibull-Parameter Reparatur
       t_0_reparatur                                          % Wartezeit (SDT/MDT/...) Reparatur
       T_reparatur                                             % charakteristische "Lebensdauer"
    end
     
    methods
    function obj=Systemelement(b_ausfall, t_0_ausfall, T_ausfall, b_reparatur, t_0_reparatur,T_reparatur)
        obj.b_ausfall=b_ausfall;                        % b_ausfall  b Weibull-Parameter Ausfall
        obj.t_0_ausfall=t_0_ausfall;                  % Ausfallfreie Zeit
        obj.T_ausfall=T_ausfall;                        % charakteristische Lebensdauer
       
        obj.b_reparatur=b_reparatur;                % b Weibull-Parameter Reparatur
        obj.t_0_reparatur=t_0_reparatur;          % Wartezeit (SDT/MDT/...) Reparatur
        obj.T_reparatur=T_reparatur;                % charakteristische "Lebensdauer"
       
     end

     
    end
end
 


mit der ich Objekte in ein Array erzeugen will.
Code:
SE(1,1)=Systemelement(1,2,3,4,5,6);

Dies tut auch.
Will ich nun allerdings bspw
Code:
SE(2,1)=Systemelement(1,2,3,4,5,6);
erzeugen bekomme ich ein

??? Input argument "b_ausfall" is undefined.

Error in ==> Systemelement>Systemelement.Systemelement at 31
obj.b_ausfall=b_ausfall; % b_ausfall b
Weibull-Parameter Ausfall


Wiederhole ich die Eingabe, so frisst Matlab es korrekt.

Gleiche Meldung, wenn ich versuche
Code:
SE(2,1)=SE(1,1)
zu setzen.

Ich vermute, dass ich da, wenig Erfahren mit Matlab OOP, irgendwas verhunzt habe.
Im großen Ganzen versuche ich nur Objekte mit diesem Aufruf zu initialisieren und danach zu kopieren.
Ich wäre zutiefst dankbar, wenn mir irgendwer helfen könnte.
Herzlichen Dank für Eure Zeit,

Hans
Private Nachricht senden Benutzer-Profile anzeigen


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 27.08.2009, 09:29     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich richtig sehe, fehlt das, was andere Sprachen den Default-Konstruktur nennen: die Möglichkeit, dass MATLAB ein Objekt OHNE Parameterübergabe erzeugt. Genau dies passiert nämlich, wenn ein Array von Objekten angelegt wird: wenn ein Array der Länge n erzeugt werden soll, ruft MATLAB zuerst den Konstruktor n mal ohne Parameter auf.
Also, der Konstruktor muss in etwa so aussehen:
Code:

function obj=Systemelement(b_ausfall, t_0_ausfall, T_ausfall, b_reparatur, t_0_reparatur,T_reparatur)
if nargin==0
    % Defaultkonstruktor
    obj.b_ausfall = 0;
    obj.t_0_ausfall = 0;
    % ...
else
   % "normaler" Konstruktor
    obj.b_ausfall=b_ausfall;                        % b_ausfall  b Weibull-Parameter Ausfall
    obj.t_0_ausfall=t_0_ausfall;                  % Ausfallfreie Zeit
    obj.T_ausfall=T_ausfall;                        % charakteristische Lebensdauer
    obj.b_reparatur=b_reparatur;                % b Weibull-Parameter Reparatur
    obj.t_0_reparatur=t_0_reparatur;          % Wartezeit (SDT/MDT/...) Reparatur
    obj.T_reparatur=T_reparatur;                % charakteristische "Lebensdauer"
end
end


Ciao,
Titus

PS: ab und zu findet man sogar in der MATLAB Hilfe so etwas schneller, als das ganze Internet zu durchsuchen (Abschnitt über Objektorientierte Programmierung->Constructors) Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
HansPoffer
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 26.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2009, 10:53     Titel:
  Antworten mit Zitat      
Vielen Dank.
Heute nacht gegen 4 bin ich auf ne sehr ähnlich Lösung gekommen.
Smile
Danke.
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.