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

C Discussion :

erreur: initializer element is not constant


Sujet :

C

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Points : 177
    Points
    177
    Par défaut
    Je compile sous Windows en utilisant gcc. J'ai l'erreur suivante dans une bibliothèque nommée 'Edje' :

    lib/edje/edje_callbacks.c:436:3: error: initializer element is not constant
    lib/edje/edje_callbacks.c:436:3: error: (near initialization for 'edje_callbacks[0].desc')

    le code en question est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    static Eo_Callback_Array_Item edje_callbacks[] = {
      { EVAS_OBJECT_EVENT_HOLD, _edje_hold_signal_cb },
      { EVAS_OBJECT_EVENT_MOUSE_IN, _edje_mouse_in_signal_cb },
      { EVAS_OBJECT_EVENT_MOUSE_OUT, _edje_mouse_out_signal_cb },
      { EVAS_OBJECT_EVENT_MOUSE_DOWN, _edje_mouse_down_signal_cb },
      { EVAS_OBJECT_EVENT_MOUSE_UP, _edje_mouse_up_signal_cb },
      { EVAS_OBJECT_EVENT_MOUSE_MOVE, _edje_mouse_move_signal_cb },
      { EVAS_OBJECT_EVENT_MOUSE_WHEEL, _edje_mouse_wheel_signal_cb },
      { NULL, NULL }
    };
    la ligne 436 est la ligne du premier élément du tableau ci-dessus. Évidemment, l'erreur a lieu pour tous les éléments de ce tableau (sauf le dernier...)

    la structure Eo_Callback_Array_Item est définie dans une bibliothèque nommée 'Eo' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct _Eo_Callback_Array_Item
    {
       const Eo_Event_Description *desc; /**< The event description. */
       Eo_Event_Cb func; /**< The callback function. */
    };
    _edje_hold_signal_cb est une fonction définie comme il faut.

    Le problème semble être EVAS_OBJECT_EVENT_HOLD. Celui-ci est défini dans une 3ème bibliothèque nommée 'Evas' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    EAPI extern const Eo_Event_Description _EVAS_OBJECT_EVENT_HOLD;
    ...
    #define EVAS_OBJECT_EVENT_HOLD (&(_EVAS_OBJECT_EVENT_HOLD))
    Je précise que EAPI est défini à __declspec(dllimport)

    quelqu'un peut-il m'expliquer d'où vient l'erreur, ainsi que sa correction ?

    merci

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    L'objet edje_callbacks est en allocation statique et ne peut donc être initialisé que par des constantes (ou une chaine littérale) autrement dit par quelque chose qui peut être évalué à la compilation ou à l'édition de liens.

    EVAS_OBJECT_EVENT_HOLD est défini comme l'adresse d'un objet _EVAS_OBJECT_EVENT_HOLD. Si cet objet était défini dans le programme (quelque part dans une des unités de compilation), cela devrait ne pas poser de problèmes, son adresse étant déterminée à l'édition de liens. Mais ici le qualificatif __declspec(dllimport) me fait penser qu'il s'agit d'un objet faisant partie d'une bibliothèque dynamique et dans ce cas, son adresse ne sera connue qu'à l'exécution.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Points : 177
    Points
    177
    Par défaut
    en effet, EVAS_OBJECT_EVENT_HOLD est défini dans une autre bibliothèque (bibliothèque 'Evas', je l'ai mentionné).

    Néanmoins, j'ai enlevé 'static', mais j'ai exactement le même problème.

    Par contre, quand je défini la macro EAPI à rien, ça passe (par défaut, elle est défini à __declspec(dllimport) dans la bibliothèque 'Edje' et __decl_spec(dllexport) dans 'Evas').

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/04/2012, 11h30
  2. Erreur "variable dimension2 might not have been initialized"
    Par jy03154586 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 02/11/2011, 12h45
  3. [Flex/Bison] Erreur 11 : initializer element is not constant
    Par henri93 dans le forum Générateurs de compilateur
    Réponses: 1
    Dernier message: 12/11/2010, 16h23
  4. [Dev-Pascal] Erreur "Unit Graph could not be compiled"
    Par marc26 dans le forum Autres IDE
    Réponses: 3
    Dernier message: 03/02/2005, 07h28

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