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

Variablen erzeugt in For schleife -> Verwendung danach

 

Tex
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 12.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2010, 13:11     Titel: Variablen erzeugt in For schleife -> Verwendung danach
  Antworten mit Zitat      
Servus,

will ganz viele Menu Einträge erstellen. Die Namen und Formatierungen habe ich in einer .mat als Struct Array gespeichert. Da Alle Einträge den selben Aufbau haben will ich sie in einer For-Schleife zusammensetzten.
Code:

for Stelle = 1:size(AMarker, 2)
    Tag = AMarker(Stelle).Tag;
    Label = AMarker(Stelle).Label;
    Visible = AMarker(Stelle).Visible;
    ForeGroundColor = AMarker(Stelle).ForeGroundColor;
    assignin('base',['AMarker_' num2str(Stelle)], uimenu(Marker, 'Tag',Tag,'Label',Label,'Visible',Visible,'ForeGroundColor',ForeGroundColor));
end
 

Das klappt soweit auch alles ganz gut. Lasse ich die For-Schleife in einer eigenen M-File ablaufen öffnet mir Matlab eine Figure mit genau diesen Einträgen die es anzeigen soll. Setzte ich die Schleife in ein Programm (in dem die Einträge bisher "hart" codiert waren) kommt folgende Fehlermeldung.

Code:

??? Undefined function or variable 'AMarker_1'.

Error in ==> MeinProg at 194
CMarker_1=uimenu(AMarker_1,'Tag','cmarker1','Label','Change Color','Callback',@color_marker);
 


CMarker 1 ist ein Untermenu von einem Menueintrag, welcher in der For-Schleife erzeugt wurde.
Ich gehe also mal davon aus, das die Variablen die in der For-Schleife erzeugt worden dem Rest des Programms nicht mehr zur verfügung stehen.

Kann mir jemand sagen wie ich das ändern kann?

Gruß Tex
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.01.2010, 13:44     Titel:
  Antworten mit Zitat      
Hallo,

ersetze mal in assignin 'base' durch 'caller'.
Hintergrund: das gibt an, in welchem Workspace die Variablen erzeugt werden. Wenn du im Command Window arbeitest, wird der Base Workspace verwendet. Funktionen haben dagegen ihre eigenen Workspaces.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Tex
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 12.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2010, 14:01     Titel:
  Antworten mit Zitat      
Das mit dem
Code:

hat leider ncihts bewirkt immer noch das selbe Problem.

Ich habe mir überlegt vor der Schleife ein Cell Array zu initialisieren in dem ich dann die Menu-Einträge reinschreibe aber das hat bisher auch noch keinen Erfolg gebracht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.01.2010, 14:07     Titel:
  Antworten mit Zitat      
Hallo,

stehen die for-Schleife und die Zeile CMarker_1 ... in der selben Funktion (d.h. gegebenenfalls auch in der selben Unterfunktion)?
Das ist das einzige Problem, das ich mir hier vorstellen kann. Dazu muss einem klar sein, dass jede Unterfunktion einen eigenen Workspace hat. Alles, was also in einer anderen Unterfunktion bekannt sein soll, muss dorthin als Eingabeargument übergeben werden.
Bei GUIs werden zum Speichern von global benötigten Informationen oft setappdata / getappdata verwendet.

Edit: Der Debugger sollte übrigens helfen, solche Probleme zu erkennen, da dort alle aktiven Workspaces betrachtet werden können.

Grüße,
Harald

Zuletzt bearbeitet von Harald am 14.01.2010, 14:22, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Tex
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 12.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2010, 14:19     Titel:
  Antworten mit Zitat      
Ja die Schleife die Zeile CMarker... stehen beide im Hauptprogramm.

sind im Allgemeinen Variablen die in der Schleife erzeugt werden, nach dem verlassen der Schleife noch zugänglich?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.01.2010, 14:24     Titel:
  Antworten mit Zitat      
Hallo,

nach dem Verlassen der Schleife: ja. Nach dem Springen in ein anderes Unterprogramm: nein.

Ich habe beim vorherigen Beitrag noch hinzugefügt, dass der Debugger hilfreich sein könnte.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Tex
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 12.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2010, 14:44     Titel:
  Antworten mit Zitat      
Okay hab mir das grad mal im Debugger angeschaut. Die Variablen AMarker_1,...,AMarker_28 werden in 'base' erstellt trotz 'caller' in 'assignin.

WIESO?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.01.2010, 15:08     Titel:
  Antworten mit Zitat      
Hallo,

das hatte ich zunächst auch falsch im Kopf. Wenn assignin mit Argument 'caller' ausgeführt wird, wird die Variable im übergeordneten Workspace erstellt. Beispiel:

Code:
function testbla
testbla2

function testbla2
assignin('caller', 'a', 5)


-> Variable a wird im Workspace von testbla erstellt.

Wenn du im selben Workspace bist, würde ich die Verwendung von assignin vermeiden und stattdessen ein Cell Array erstellen, z.B. so:

Code:
AMarker_{Stelle} = uimenu(Marker, 'Tag',Tag,'Label',Label,'Visible',Visible,'ForeGroundColor',ForeGroundColor));


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Tex
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 12.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2010, 15:20     Titel:
  Antworten mit Zitat      
Sehr schön,

Das funktioniert. Ich bedanke mich recht herzlich. Meine DA wieder ein Stück weiter.

Da war meine Idee mit dem Cell Array gar nciht so schlecht, nur halt falsch umgesetzt Very Happy
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 - 2025 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.