IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

[structures] Erreur structure vide


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut [structures] Erreur structure vide
    J'ai declare une structure en global dans l'Opening function de mon GUI comme ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    global selected;
    selected=struct ( ...
    'prot', 'no selected prot',...
    'pres',0,...
    'frac',0,...
    'index_prot',0,...
    'index_pres',0,...
    'lines',[],...
    'tab',{},...
    'tab_size',0,...
    'targetName',{},...
    'type',{},...
    'dose',[],...
    'volume',[],...
    'result',[],...
    'currentName',{},...
    'color',[] );
    Plus tard, dans une autre fonction je veux modifier le champs index_prot de cette meme structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    global selected;
    selected.index_prot=get(handles.protocol_popupmenu,'Value');
    str=get(handles.protocol_popupmenu,'String');
    selected.prot=str{selected.index_prot};
    J'obtiens cette erreur que je ne comprends decidemment pas...
    ??? A dot name structure assignment is illegal when the structure is empty.
    Use a subscript on the structure.

    Error in ==> interfaceBis>protocol_popupmenu_Callback at 279
    selected.index_prot=get(handles.protocol_popupmenu,'Value');

    Error in ==> gui_mainfcn at 95
    feval(varargin{:});

    Error in ==> interfaceBis at 60
    gui_mainfcn(gui_State, varargin{:});

    ??? Error using ==> interfaceBis('protocol_popupmenu_Callback',gcbo,[],guidata(gcbo))
    A dot name structure assignment is illegal when the structure is empty.
    Use a subscript on the structure.

    ??? Error while evaluating uicontrol Callback
    Je ne trouve rien la dessus sur les forums ni sur le web.

    Quelqu'un peut-il m'aider s'il vous plait ???!! Ca fait trois jours que je cherche desesperement!! J'ai tout essaye. Enfin surement pas tout....

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    On va déjà supprimer la variable globale... en utilisant GUIDATA

    Dans la fonction OpeningFcn tu fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    handles.selected=struct ( ...
    'prot', 'no selected prot',...
    'pres',0,...
    'frac',0,...
    'index_prot',0,...
    'index_pres',0,...
    'lines',[],...
    'tab',{},...
    'tab_size',0,...
    'targetName',{},...
    'type',{},...
    'dose',[],...
    'volume',[],...
    'result',[],...
    'currentName',{},...
    'color',[] );
     
    guidata(hObject,handles)
    Tu devrais maintenant avoir accès à handles.selected dans n'importe quelle partie du code du GUI.

  3. #3
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut
    Pourquoi est ce mieux d'enlever les globales ? ... Il me semble que c'est pour eviter les confusions entre les noms de variables, mais j'en ai seulement 8 ... C'est pas un gros gros code. Est ce que ca pose reellement un probleme?

    Je veux aussi pouvoir acceder a 'selected' dans d'autres fonctions (autres m-files) et ca n'a pas l'air possible avec ta methode... ?

    Sinon, pour mon erreur, quelqu'un sait-il comment la resoudre?? Je suis toujours bloquee.

    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par emi3113
    Je veux aussi pouvoir acceder a 'selected' dans d'autres fonctions (autres m-files) et ca n'a pas l'air possible avec ta methode... ?
    Cela sera toujours possible avec GUIDATA (tant que l'objet Figure n'est pas détruit).
    Citation Envoyé par emi3113
    Sinon, pour mon erreur, quelqu'un sait-il comment la resoudre??
    Le problème vient de l'initalisation des champ contenant des tableaux de cellules dans la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >> S=struct('a',{})
     
    S = 
     
    0x0 struct array with fields:
        a
     
    >> S.a=0
    ??? A dot name structure assignment is illegal when the structure is empty.
      Use a subscript on the structure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >> S=struct('a',[])
     
    S = 
     
        a: []
     
    >> S.a=0
     
    S = 
     
        a: 0
    Il faut donc initialiser ces champs avec [] et non pas {}.
    Même si c'est pour y stocker un tableau de cellules après

  5. #5
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut
    Parfait ca marche! Ca venait bien des {}... Merci beaucoup d'avoir repondu aussi rapidement!

  6. #6
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut pourquoi eviter les variables globales?
    Par contre, je t'avoue ne pas avoir tout compris a l'histoire des variables globales...je prog en matlab depuis juste un mois.

    Si je fais ce que tu m'a dit , dois-je remplacer 'selected' par 'handles.selected' dans toutes mes fonctions y compris celles des autres m-files? Avec les variables globales, j'ai rien besoin de passer en argument des fonctions, c'est plus facile...

    Quelle est exactement la raison pour laquelle il faut tjs enlever les global... mes profs me disaient ca aussi en Java...

    Cordialement

Discussions similaires

  1. Incrémentation d'un élément de structure : erreur de segmentation
    Par BOByTOX dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 27/04/2011, 19h37
  2. Pointeurs et structures: erreur de segmentation
    Par Skize dans le forum Débuter
    Réponses: 7
    Dernier message: 07/10/2010, 09h43
  3. erreur structure je pense
    Par darkwall_37 dans le forum Débuter
    Réponses: 4
    Dernier message: 06/04/2009, 22h40
  4. Structures, erreurs de compilation
    Par koktel_dfr dans le forum C
    Réponses: 10
    Dernier message: 24/05/2007, 15h30
  5. Réponses: 20
    Dernier message: 11/07/2006, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo