Pb Structures

Signaler
Messages postés
9
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
12 décembre 2007
-
Messages postés
9
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
12 décembre 2007
-
Bonjour, j'ai un soucis avec mes structures

EXT_AFFICHAGE typedef struct{
    gchar Valeur[20];
    int XT;
    int YT;
    char police[10];
    int taille;
    int gras;
    int souligne;
    int italic;
    char couleur[7];
    int digit;
} Var_Txt;

/* Construction d'une structure pour les icônes */

EXT_AFFICHAGE typedef struct{
    gchar Nom[11];
    int Variable;
    int Var_type;
    int X;
    int Y;
    Var_Txt Var_Texte;
} Icone;

Lorsque que je déclare des variables :
  static int var_401 = 1,
        var_301 = 1, 
        var_302 = 1, 
        var_312 = 0, 
        var_303 = 1, 
        var_222 = 1, 
        var_101 = 0, 
        var_103 = 1;

  static Var_Txt  NO_Var_Text = { "0", 0,   0,  "0",     0,  0, 0, 0, "0000000", 0};
  static Var_Txt Var_Text_103 = {"72", 218, 22, "Arial", 20, 0, 0, 0, "#757575", 2 };

  static Icone icone_401 = {"I_401", 1, IMAGE, 4, 374, { "0", 0,   0,  "0",     0,  0, 0, 0, "0000000", 0}},
           icone_301 = {"I_301", 1, IMAGE, 110, 374, NO_Var_Text},
           icone_302 = {"I_302", var_302, IMAGE, 216, 374, NO_Var_Text},
           icone_312 = {"I_312", var_312, IMAGE, 322, 374, NO_Var_Text},
           icone_303 = {"I_303", var_303, IMAGE, 428, 374, NO_Var_Text},
           icone_222 = {"I_222", var_222, IMAGE, 534, 374, NO_Var_Text},
           icone_101 = {"I_101", var_101, IMAGE, 4, 3, NO_Var_Text},
           icone_103 = {"I_103", var_103, TEXT, 188, 3, Var_Text_103};

A la compilation gcc me met :
gcc `pkg-config --cflags gtk+-2.0` `xml2-config --cflags` -W -Wall -g -o affichage.o -c affichage.c
In file included from affichage.c:31:
affichage.h:87: erreur: un élément de l'initialisation n'est pas une constante
affichage.h:87: erreur: (near initialization for «icone_302.Variable")
affichage.h:87: attention : initialisation manquante
affichage.h:87: attention : (near initialization for «icone_302.Var_Texte")
affichage.h:88: erreur: un élément de l'initialisation n'est pas une constante
affichage.h:88: erreur: (near initialization for «icone_312.Variable")
affichage.h:88: attention : initialisation manquante
affichage.h:88: attention : (near initialization for «icone_312.Var_Texte")
affichage.h:89: erreur: un élément de l'initialisation n'est pas une constante
affichage.h:89: erreur: (near initialization for «icone_303.Variable")
affichage.h:89: attention : initialisation manquante
affichage.h:89: attention : (near initialization for «icone_303.Var_Texte")
affichage.h:90: erreur: un élément de l'initialisation n'est pas une constante
affichage.h:90: erreur: (near initialization for «icone_222.Variable")
affichage.h:90: attention : initialisation manquante
affichage.h:90: attention : (near initialization for «icone_222.Var_Texte")
affichage.h:91: erreur: un élément de l'initialisation n'est pas une constante
affichage.h:91: erreur: (near initialization for «icone_101.Variable")
affichage.h:91: attention : initialisation manquante
affichage.h:91: attention : (near initialization for «icone_101.Var_Texte")
affichage.h:92: erreur: un élément de l'initialisation n'est pas une constante
affichage.h:92: erreur: (near initialization for «icone_103.Variable")
affichage.h:92: erreur: un élément de l'initialisation n'est pas une constante
affichage.h:92: erreur: (near initialization for «icone_103.Var_Texte")
affichage.h:92: attention : initialisation manquante
affichage.h:92: attention : (near initialization for «icone_103.Var_Texte")

Par contre il est content si je  fais :
#define var_103 1
#define var_101 0
#define var_222 1
#define var_303 1
#define var_312 0
#define var_302 1
#define var_301 1

??? Mais je veux que ce soient des variables!
Merci

8 réponses

Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
12
Si tu veux que ce soit des araibles, tu ne peux pas les initialiser de la sorte.
Je te proposerai un mix de tes deux méthodes.

#define INIT_VAR103   1
static int var_103 = INIT_VAR103;
static Icone icone_103 = {... INIT_VAR103,...};

Apres, il faut voir ce que tu souhaites faire.
Je me demande si tu ne voudrais pas que le champ variable de ta structure Icone ne change en même temps que ta variable var_xxx.
Si c'est le cas, utilise plutot des pointeurs.
Savon
Messages postés
9
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
12 décembre 2007

Effectivement,  mon icone change selon la valeur de variable.

J'étudie la solution avec les pointeurs, mais je ne suis pas contre un petit coup de pouce!

mais merci pour ton aide julienbj.
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
12
typedef struct icone
{
    ...
    unsigned int *variable;
    ....
} ICONE;

int ma_variable;
ICONE ico = {... &ma_variable ...};

Je pense que ça ne devrait pas poser de souci. Pas de compilos sous la main pour tester si &ma_variable est constante, mais selon ma logique, ce devrait être le cas
Savon
Messages postés
9
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
12 décembre 2007

En fait, je pense que je dois en dire plus : je ne suis pas sûre d'être bien partie.

Le but :
je doit partir de fichiers xml contenant la configuration des pages que j'ai à afficher (1 fichier xml par page) ex :

    <titre></titre>
   
       ...
   
   

       ...

   
    ...

Je ne connais ni le nombre de pages ni le nombre d'icones par page, je doit sans doute utiliser des liste chaînées, mais j'avoue être un peu perdue entre les pointeurs et les listes chaînées.

Si qqn pouvais me donner un petit coup de pouce...
Messages postés
9
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
12 décembre 2007

Désolée j'ai envoyer le dernier message en ayant pas vu que tu m'avais répondu julienbj, merci, ça à l'air de fonctionner, mais j'ai d'autres erreurs qui apparaissent :

affichage.h:31: erreur: multiple storage classes in declaration specifiers
affichage.h:46: erreur: multiple storage classes in declaration specifiers
affichage.h:52: erreur: expected specifier-qualifier-list before «Var_Txt"
affichage.h:68: erreur: multiple storage classes in declaration specifiers
affichage.h:71: erreur: expected specifier-qualifier-list before «Icone"
affichage.h:83: erreur: multiple storage classes in declaration specifiers
affichage.h:83: attention : «var_401" initialized and declared «extern"
affichage.h:84: attention : «var_301" initialized and declared «extern"
affichage.h:85: attention : «var_302" initialized and declared «extern"
affichage.h:86: attention : «var_312" initialized and declared «extern"
affichage.h:87: attention : «var_303" initialized and declared «extern"
affichage.h:88: attention : «var_222" initialized and declared «extern"
affichage.h:89: attention : «var_101" initialized and declared «extern"
affichage.h:90: attention : «var_103" initialized and declared «extern"
affichage.h:92: erreur: multiple storage classes in declaration specifiers
affichage.h:92: erreur: expected «=", «,", «;", «asm" or «__attribute__" before «NO_Var_Text"
affichage.h:93: erreur: multiple storage classes in declaration specifiers
affichage.h:93: erreur: expected «=", «,", «;", «asm" or «__attribute__" before «Var_Text_103"
affichage.h:95: erreur: multiple storage classes in declaration specifiers
affichage.h:95: erreur: expected «=", «,", «;", «asm" or «__attribute__" before «icone_401"
affichage.h:95: erreur: expected identifier or «(" before «," token
affichage.h:96: erreur: expected identifier or «(" before «," token
affichage.h:97: erreur: expected identifier or «(" before «," token
affichage.h:98: erreur: expected identifier or «(" before «," token
affichage.h:99: erreur: expected identifier or «(" before «," token
affichage.h:100: erreur: expected identifier or «(" before «," token
affichage.h:101: erreur: expected identifier or «(" before «," token
affichage.h:104: erreur: multiple storage classes in declaration specifiers
affichage.h:104: erreur: expected «=", «,", «;", «asm" or «__attribute__" before «page_000"
affichage.h:117: erreur: expected declaration specifiers or «..." before «Icone"
affichage.h:123: erreur: expected declaration specifiers or «..." before «Var_Txt"
affichage.h:126: erreur: expected «)" before «pagex"
main.c: In function «main":
main.c:41: attention : passing argument 1 of «Init_affichage" makes integer from pointer without a cast
main.c:41: attention : passing argument 2 of «Init_affichage" from incompatible pointer type
main.c:42: attention : implicit declaration of function «Affiche_Page"
main.c:42: erreur: «page_000" undeclared (first use in this function)
main.c:42: erreur: (Each undeclared identifier is reported only once
main.c:42: erreur: for each function it appears in.)
make: *** [main.o] Erreur 1
Messages postés
9
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
12 décembre 2007

C'est bon j'ai compris les dernières erreurs : typedef fait déjà de l'allocation de mémoire, il ne faut donc pas rajouter de extern ou autre!!

Merci pour ton aide, je regarde maintenant les listes chaînées.
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
12
?
Typedef ne fait pas du tout d'allocation.
C'est un mot clef qui permet de redéfinir des types, il n'alloue rien du tout.
Je pense que tu avais un probleme d'include. Sinon, tu devais déclarer des variables globales en extern tout en leur affectant une valeur, ce qui est impossible.
Dans le code que tu as montré, il n'y a aucun externe de visibles, ou en as tu mis autrement?
Savon
Messages postés
9
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
12 décembre 2007

Les extern se cachaient sous EXT_AFFICHAGE qui vaut null quand il est appelé par son correspondant .c et "extern" quand il est appelé par un autre fichier .c.

Encore merci pour ton aide.