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 :

probleme avec ma fonction display()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut probleme avec ma fonction display()
    Bonjour à tous,

    dans mon code j'ai une erreur:
    error C2371: 'display' : redefinition; different basic types
    alors que je n'ai qu'une fonction display.

    voici le bout de code où j'ai le display:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    glutDisplayFunc(display);
     
    void display() {
     
      glLoadIdentity();
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      gluLookAt(0.0, 0.0, anglecamp, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
      glRotatef(anglecamx, 1, 0, 0);
      glRotatef(anglecamy, 0, 1, 0);
      glRotatef(anglecamz, 0, 0, 1);
      affiche_grille();
    }
    et nulle part ailleur je n'utilise ce display...... bizarre

  2. #2
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Etrange...

    Essaie de changer le nom de ta fonction, je pense que qu'avec un nom aussi generique elle doit appartenir a une des librairies que tu utilises, d'ou le conflit.

    Qu'utilises tu comme compilateur ? Si il ne t'affiche pas les deux endroit ou sont situees tes fonctions essaie de compiler avec un autre. Peut etre qu'il sera plus clair...

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    en changeant le nom ça ne change rien

  4. #4
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    bien le bonjour,

    as-tu bien pensé à déclarer l'interface de ta fonction display plus haut, comme par exemple dans un .h ?

  5. #5
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Fichtre...

    Est-ce que tu inclus des headers dans ton fichier ?
    Il se peut que le prototypage de la fonction dans le fichier d'entete differe de sa definition dans le fichier .c.

    Ou alors que le header soit inclus plusieurs fois. Ce qui n'arrive pas si on le protege mais sait on jamais...

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    j'ai mis ça en haut de mon fichier:
    void display();
    quand je le mets il me met une erreur aussi là dessus.
    et quand je l'enleve ça ne me mets que l'erreur sur la fonction

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut Re: probleme avec ma fonction display()
    Bonjour,
    Citation Envoyé par isa21493
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glutDisplayFunc(display);
    C'est normal cet appel de fonction en dehors du corps d'une fonction

  8. #8
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par isa21493
    j'ai mis ça en haut de mon fichier:
    void display();
    quand je le mets il me met une erreur aussi là dessus.
    et quand je l'enleve ça ne me mets que l'erreur sur la fonction
    Voui. Si ca te remet une erreur en plus c'est un probleme de double declaration...

    Tu as un truc comme ca dans ton fichier :
    :

  9. #9
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut Re: probleme avec ma fonction display()
    Citation Envoyé par gege2061
    Bonjour,
    Citation Envoyé par isa21493
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glutDisplayFunc(display);
    C'est normal cet appel de fonction en dehors du corps d'une fonction
    La cause de l'erreur pourrait etre une variable qui porte le meme nom que la fonction, d'ou le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    different basic types
    Mais si l'erreur est toujours la apres un changement de nom de la fonction...

    isa21493, il y aurait moyen que tu nous montre un peu de code ?

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    en fait mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glutDisplayFunc(display);
    est dans mon main

    oui j'ai des .h qui appelent ma fonction comme ça:

  11. #11
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    Citation Envoyé par isa21493
    oui j'ai des .h qui appelent ma fonction comme ça:
    la glut définit bien que les callbacks notamment celui du display doivent renvoyer un void. Or, en écrivant juste display();, elle est implicitement considérée comme int

  12. #12
    Membre confirmé Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Par défaut
    Citation Envoyé par isa21493
    oui j'ai des .h qui appelent ma fonction comme ça:
    Salut ...
    Des .h qui appellent ta fonction ??? Non je ne pense pas ... M'enfin, as-tu bien déclaré (si ton fichier s'appelle toto.h) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef _TOTO_H
    #define _TOTO_H
     
    // ton code
     
    #endif // _TOTO_H
    ???

    Sinon, essaye ça dans chaque fichier et ça devrait déjà aller mieux ...

    Marco85

  13. #13
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    voic mon code:

    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
    34
    35
    36
    #include <stdio.h>
    #include <GL/freeglut.h>
    #include "humains.c"
     
    void display();
     
    int main(int argc, char** argv) {
     
    int choix = 1;
     
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(950, 950);
    glutInitWindowPosition(100, 20);
    glutCreateWindow(argv[0]);
    init();
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glEnable(GL_DEPTH_TEST); /* Calcule la profondeur des faces cachees */
    glutKeyboardFunc(keyboard);
     
        glutMainLoop();
      }
    }
     
     
    void display() {
     
      glLoadIdentity();
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      gluLookAt(0.0, 0.0, anglecamp, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
      glRotatef(anglecamx, 1, 0, 0);
      glRotatef(anglecamy, 0, 1, 0);
      glRotatef(anglecamz, 0, 0, 1);
      affiche_grille();
    }
    voici le code dans humain.h qui utilise le display:
    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
     
    void joueur1() {
     
      int col;
      int coup = 0;
     
      while(coup == 0) {
        printf("\nJoueur 1 : Choisissez une colonne, SVP. ");
        scanf("%d", &col);
        coup = dedans(col, JOUEUR1); /* regarde si la colonne choisie appartient 
    au
    tableau ou si elle est pleine; dans ces 2 cas coup = 0 */
        if(coup == 0) {
          printf("\nIMPOSSIBLE !!!  Rejouez votre coup.\n");
        }
      }
      display(); /* met le pion du joueur a la bonne place */
    }

  14. #14
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Beurk...

    Je crois qu'il y a un probleme de structuration...

    On ne met pas de code dans un .h. Jamais.
    On declare ses fonctions, on definit ses structures.

    Ensuite on met le code dans le .c.

    khayyam90 a raison.
    Tu appelles display() dans ton .h. Donc, vu qu'elle n'a jamais ete declaree avant, elle est implicitement consideree comme renvoyant un int. D'ou la furieuse protestation du compilateur quand il s'apercoit a son grand dam que cette fonction est de type void.

    Il faut declarer ses fonctions avant tout appel pour eviter les problemes.

    Sinon il manque return(0) a la fin du main().

  15. #15
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    je me suis trompée, j'ai pas de .h, ce ne sont que des .c
    et c'est dans ce .c que j'appelle display

  16. #16
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    bon c'est bon c'est résolu, j'ai créé un .h où j'ai mis:

    et je l'ai déclaré avant l'appel aux .c

    merci bcp pour votre aide.

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: probleme avec ma fonction display()
    Citation Envoyé par isa21493
    Bonjour à tous,

    dans mon code j'ai une erreur:
    error C2371: 'display' : redefinition; different basic types
    alors que je n'ai qu'une fonction display.
    Tu as bien donné un prototype avant ?

    C'est soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void display(void);
     
    glutDisplayFunc(display);
     
    void display() {
    <...>
    }
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void display(void) {
    <...>
    }
     
    glutDisplayFunc(display);

  18. #18
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par isa21493
    en fait mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glutDisplayFunc(display);
    est dans mon main

    oui j'ai des .h qui appelent ma fonction comme ça:
    Mauvais prototype. Le type de retour implicite est int, or la fonction retourne void. Normal que ça couine. Il faut être cohérent.

  19. #19
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par isa21493
    je me suis trompée, j'ai pas de .h, ce ne sont que des .c
    et c'est dans ce .c que j'appelle display
    Encore pire. On n'inclue pas de .c. Jamais.

    A lire tous les soirs integralement pendant une semaine.

    http://emmanuel-delahaye.developpez.com/codage.htm

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec la fonction Ontimer
    Par Djule dans le forum MFC
    Réponses: 8
    Dernier message: 27/11/2005, 17h52
  2. Probleme avec la fonction rename()
    Par TheZenZen dans le forum C
    Réponses: 6
    Dernier message: 08/10/2005, 15h59
  3. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

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