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 :

Structures et constantes


Sujet :

C

  1. #1
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut Structures et constantes
    Bonjour,
    Je voudrais savoir comment m'y prendre pour déclarer un tableau constant de structures constantes.
    J'explique plus présicement :
    Je voudrais faire afficher de la lumière, décomposéeen trois couleurs de base (rouge, vert, bleu). Pour cela, j'ai créé une structure couleur que voici, dans un fichier color.h :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #include "types.h"
     
    struct color{
          uint8_t red;
          uint8_t green;
          uint8_t blue;
    };
     
     
    extern struct color black  ;   
    extern struct color white ;   
     
    extern struct color red   ;   
    extern struct color green  ;    
    extern struct color blue  ;    
     
    extern struct color cyan    ;  
    extern struct color magenta ;  
    extern struct color yellow   ;  
     
    extern struct color azure   ;  
    extern struct color beige   ;  
    extern struct color blueviolet;
    extern struct color brown    ;
    extern struct color darkviolet;
    extern struct color gold     ;   
    extern struct color grey   ;   
    extern struct color ivory ;   
    extern struct color orange ;   
    extern struct color pink   ;   
    extern struct color turquoise; 
    extern struct color violet;
    Puis la définition de plusieurs couleurs de base, dans le fichier color.c
    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
    19
    20
    21
    22
    23
    24
    25
     
    #include "colors.h"
     
    struct color white      = {255,255,255};
     
    struct color red      = {255, 0, 0};
    struct color green       = {0,255,0};
    struct color blue       = {0,0,255};
     
    struct color cyan       = {0,255,255};
    struct color magenta    = {255,0,255};
    struct color yellow      = {255,255,0};
     
    struct color azure      = {240,255,255};
    struct color beige      = {245,245,220};
    struct color blueviolet = {138,43,226};
    struct color brown     = {165,42,42};
    struct color darkviolet = {148,0,211};
    struct color gold         = {255,215,0};
    struct color grey       = {128,128,128};
    struct color ivory     = {255,255,240};
    struct color orange     = {255,165,0};
    struct color pink       = {255,192,203};
    struct color turquoise  = {64,224,208};
    struct color violet     = {238,130,238};
    Finalement, je crée, dans mon fichier main.c, un tableau, que je veux constant comme 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
     
    int main(void)
    {
    //	ms_pause(100);    //time for alimentation's stabilisation
    	init();
            actual_color = blue;
            const struct color tab_color[]={white, black, green, blue, red, yellow, cyan, magenta, azure};
            pwm_init();
            pwm_on(true);
     
    //        while(1){
            for (int j=0; j<8;++j) {   
              pwm_set(tab_color[j]);          
     ...
    Sauf que mon compilateur se plaint, que les membres white, black, ... ne sont pas des constantes...

    Merci de votre aide

  2. #2
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Peut-être en déclarant les structures white, red, etc..., comme étant constantes.

  3. #3
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut
    Moi je veux bien, mais où ?

  4. #4
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const struct color white      = {255,255,255};

  5. #5
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut
    Justement, j'y avais bien pensé, mais que je le mette dans mon en-tête de fichier main.c, dans mon fichier color.c (avec l'extern const qui va bien dans color.h), ca me dit toujours la même chose.

    Le principe était de ne pas tout rentrer à la main, mais de se faire une petite bibliothèque de couleur pour réutiliser tout ca...

  6. #6
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Désolé, je ne sais pas. Je n'ai pas l'habitude d'utiliser const.
    Vous pouvez toujours vous en sortir en ne déclarant pas votre tableau comme const et en l'initialisant dans main().
    Ou bien, vous pouvez garder const et initialiser ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const struct color tab_color[]={{255,255,255},{0,0,0},...};

  7. #7
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    C'est un warning ou une erreur ?

    Normalement en mettant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const color  white {255,255,255};
    et en faisant pareil pour chaque couleur je n'ai aucune erreur ni warning...

    Ca compile sous CB

  8. #8
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par hegros
    C'est un warning ou une erreur ?

    Normalement en mettant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const color  white {255,255,255};
    et en faisant pareil pour chaque couleur je n'ai aucune erreur ni warning...

    Ca compile sous CB
    Je pense que le problème vient du tableau tab_color, pas des couleurs individuelles.

  9. #9
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par stephl
    Je pense que le problème vient du tableau tab_color, pas des couleurs individuelles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const struct color tabColor[]={white,red};
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct color const tabColor[]={white,red};
    compile chez moi.

  10. #10
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    OK, chez moi, cela ne marche pas. Sur la ligne du tableau, j'obtiens:
    Incompatible type conversion in function main

  11. #11
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par stephl
    OK, chez moi, cela ne marche pas. Sur la ligne du tableau, j'obtiens:
    Incompatible type conversion in function main
    Fais voir ton code.

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    un fread ( tab_color ... ) ferait l'affaire non ??

  13. #13
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    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
    #include <stdio.h>
     
    struct color
     {unsigned char r,g,b;};
     
    const struct color white={255,255,255};
     
     
    int main(void)
     {
     struct color a[1]={white};
     
     printf("%d\n",a[1].r);
     return 0;
     }

  14. #14
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par stephl
    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
    #include <stdio.h>
     
    struct color
     {unsigned char r,g,b;};
     
    const struct color white={255,255,255};
     
     
    int main(void)
     {
     struct color a[1]={white};
     
     printf("%d\n",a[1].r);
     return 0;
     }
    Donne aussi les erreurs de compilation/warning si tu peux.

    Déja un big probléme quand tu déclares a[1] il faut te rappeler que les indices en C commencent à 0 donc dans ce cas a[1] est hors borne.

    Mise à part cela ton code compile chez moi....

  15. #15
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Oui, excusez-moi pour l'indice. J'avais modifié le tableau pour ne garder qu'un seul élément afin de réduire la zone de recherche du problème, mais j'ai oublié de changer le main() . Honte à moi!
    Voici les résultats de la compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Borland C++ 5.2 for Win32 Copyright (c) 1993, 1997 Borland International
    Test.c:
    Error Test.c 11: Incompatible type conversion in function main
    *** 1 errors in Compile ***

  16. #16
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Il est pas un peu vieux ton compilo ?

  17. #17
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Pourquoi vieux? De toute façon, en 97, le C était déjà abouti. J'ai essayé avec Visual et j'obtiens:
    c:\documents and settings\stephane\mes documents\temp\test2\test.c(11) : error C2115: 'initializing' : incompatible types

Discussions similaires

  1. tableau constant de structures
    Par LotfiB dans le forum Java ME
    Réponses: 4
    Dernier message: 10/09/2008, 12h17
  2. Utilisation de structure non constante dans <list>
    Par bleuerouge dans le forum SL & STL
    Réponses: 4
    Dernier message: 17/07/2008, 10h01
  3. Réponses: 1
    Dernier message: 18/06/2008, 23h53
  4. Constantes et autre Structures non reconnue [API Windows]
    Par LeFoUvErT dans le forum Dev-C++
    Réponses: 3
    Dernier message: 15/09/2007, 11h48
  5. Réponses: 9
    Dernier message: 14/01/2007, 16h40

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