Wenn ich mittels selbst entwickelter SetMethoden auf eines der beiden Elemente zugreife und einen Wert verändere, so ändert sich dieser Wert in beiden Elementen.
Ich dachte, durch das zweimalige Laden der Datei wird verhindert, dass beide Objekt "pointerlike" auf dasselbe zeigen und somit voneinander abhängig sind.
Ich habe auch schon ausprobiert, die Dateien in zwei verschiedene Ordner abzuspeichern und die Dateien unterschiedlich zu benennen. Hat leider beides nicht funktioniert.
Selbst wenn man nach der ersten Zuweisung die Variable "CF640" löscht, ist die Abhängigkeit vorhanden.
Nun meine Frage: Wie kann ich eine Datei in zwei verschiedene Variablen laden, sodass diese voneinander entkoppelt sind?
ich kann deinen Fehler so nicht reproduzieren. Welchen Datentyp wird denn überhaupt zugewiesen? Ich kann so ein Verhalten nur bei einer Instanz erklären.
Zitat:
Wenn ich mittels selbst entwickelter SetMethoden auf eines der beiden Elemente zugreife und einen Wert verändere, so ändert sich dieser Wert in beiden Elementen.
Bitte auch Setter Methoden posten, ich vermute dass der Fehler auch dort stecken könnte.
Ich habe deine Klasse und die Datei wie folgt modifiziert, und es lief alles problemlos
Die Datei ist eine vorher generierte mat-Datei. In ihr wird ein Chip mit 512 Registern abgebildet. Der Datentyp des Objektes, das beim Laden der Datei entsteht, ist "Register". Diesen Datentyp habe ich selbst geschrieben.
Mit der SetMethode verhält es sich folgendermaßen:
Ich möchte einmal nur das Schreibobjekt schreiben. Das heißt, ich adressiere nur das Element CF640_Write und ändere dort Werte. Das Objekt CF640_Read soll aber NICHT verändert werden.
In derselben Methode soll es aber auch möglich sein, beide Objekte gleichzeitig zu beschreiben, indem das Element "Typ" anders gesetzt wird.
Es gibt also eine SetMethode, die beide Objekte beschreiben könnte.
flag = 0; % Fehlerflag for ii = 1 : 512% Suchen des zu verändernden Registers ifstrcmp(ASIC.CF640_Write(1,ii).content.name, input) || ... strcmp(ASIC.CF640_Write(1,ii).content.adresse, input) if ASIC.CF640_Write(1,ii).content.access == 'rw'
ASIC.CF640_Write(1,ii).content.SetRegister_value(value);
pos = ii; % Speichert Position des Registers
flag = 1;
elseif ASIC.CF640_Write(1,ii).content.access == 'r'
error('Access denied!!! It is not allowed to set this Register');
end end end
if flag == 0 ifstrncmp(input, '0x',2) == 1% Falsche Adresseingabe abfangen error('Desired address does not exist!');
elseifstrcmp(input, '0x') == 0% Nur kleingeschriebene Namen erlauben ifany(any((input>='A'&input<='Z')))% Nur kleingeschriebene Namen erlauben error('Please check spelling. Capital letters are prohibited');
else error('Reference to non-existend field');
end end end
also doch eine Instanz der Klasse Register. Eigentlich wenn man eine Instanz
speichert, ist das beim Laden trotzdem eine Instanz der Klasse, also immer der selbe Objekt.
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
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.