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 :

Conflicting types dans fonction déclarée


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Conflicting types dans fonction déclarée
    Bonjour,

    J'ai besoin d'un conseil car je ne comprend pas cette erreur "conflicting types".
    J'ai mis le prototype de la fonction dans le fichier header: editeur.h.
    J'ai écris la fonction dans le fichier source: editeur.c.
    Et je l'utilise dans ce même fichier.
    J'utilise la SDL et j'essaye de redimensionner un rectangle(ça fonctionne hors fonction, mais c'était moche ).

    Et je reçois toujours cette erreur:

    C:\prog\Projects\2DjumpGame\editeur.c 407 error: conflicting types for 'redimensionnerRect'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void redimensionnerRect(int xMod, int yMod, int wMod, int hMod, long currentRect, SDL_Surface **sol, SDL_Rect **posSol, SDL_Surface *ecran)
    {
        sol[currentRect] = SDL_CreateRGBSurface(SDL_HWSURFACE, posSol[currentRect]->w + wMod , posSol[currentRect]->h + hMod, 32,0,0,0,0);
        SDL_FillRect (sol[currentRect], NULL, SDL_MapRGB(ecran->format, 50, 50, 50));
        posSol[currentRect]->x += xMod;
        posSol[currentRect]->y += yMod;
     
    }
    C:\prog\Projects\2DjumpGame\editeur.c 194 error: previous implicit declaration of 'redimensionnerRect' was here

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    redimensionnerRect(-1,0,1,0,currentRect, *sol, *posSol, ecran);
    et voici le prototype contenu dans editeur.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void redimensionnerRect(int xMod, int yMod, int wMod, int hMod, long currentRect, SDL_Surface **sol, SDL_Rect **posSol, SDL_Surface *ecran);

    Mais je ne suis pas sûr d'une chose: dois-je faire un #include de mon fichier editeur.h dans le fichier editeur.c?

    Et, tant que j'y suis, j'ai lu quelque part qu'il ne fallait pas remettre l'include des librairies utilisées dans tous les fichiers du projet: "... cela va à l'encontre de la règle de l'encapsulation"(d'après l'auteur d'un post).
    Mais si je ne le fait pas, il me bombarde d'erreurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL.h>
    #include <SDL_image.h>
    #include <SDL_ttf.h>
    Dois-je inclure le main.c dans tous mes fichiers pour palier à ce problème?
    En est-ce un?

    Voilà, j'arrête avec mes questions.
    D'avance merci pour vos réponses!

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    D'une manière générale, on n'inclue jamais un fichier .c, et on inclue toujours fichier.h dans fichier.c.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Il me semblait aussi que ce serait bizarre.
    Mais comment faire alors pour que les librairies soient déclarées dans tous les fichiers?

    Enfin, cette question reste un peu accessoire étant donné que j'aimerais comprendre mon erreur.

    EDIT: J'avais mal lu: tu as répondu à ma question principale il me semble
    Merci!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    308
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 308
    Points : 373
    Points
    373
    Par défaut
    Ton erreur vient sûrement du type de tes variables sol et posSol. Si ces variables sont de types SDL_Surface* et SDL_Rect*, l'erreur est tout à fait normale... Pour ne pas qu'il y ait d'erreur, il aurait fallu que sol et posSol soit respectivement de type SDL_Surface*** SDL_Rect***...
    Il faut que tu passes l'adresse de ces variables, donc pas *sol et *posSol mais plutôt &sol et &posSol... Tout dépend simplement du type des variables...

    Il faut aussi que tu inclus ton editeur.h dans tous les fichiers qui utilisent les fonctions définies dans ce fichier.

    Sinon pour inclure les .h dans tous tes fichiers... Tu as le choix, soit tu crées un fichier .h qui contient tous les .h communs à tous les fichiers de ton application et là tu n'inclus qu'un seul .h, soit tu configures ton compilateur pour qui les inclut automatiquement.

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par PsychoH13 Voir le message
    soit tu configures ton compilateur pour qui les inclut automatiquement.
    J'aimerais bien que tu me montres ça.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    308
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 308
    Points : 373
    Points
    373
    Par défaut
    Bah si ton compilateur peut l'utiliser tu peux définir des prefix header. Après personnellement je n'ai jamais utilisé l'inclusion automatique. Mais bon paraît-il ça existe. lol

    En tout cas, les .pch marche sous GCC et t'évite d'avoir à tout inclure à chaque fois.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par PsychoH13 Voir le message
    Bah si ton compilateur peut l'utiliser tu peux définir des prefix header. Après personnellement je n'ai jamais utilisé l'inclusion automatique. Mais bon paraît-il ça existe. lol

    En tout cas, les .pch marche sous GCC et t'évite d'avoir à tout inclure à chaque fois.
    Pas de "prefix header". pch signifie Pre-Compiled Headers. C'est une invention de Microsoft qui a des headers tellement monstrueux pour l'API Win32 qu'il a fallu inventer cette astuce pour réduire les temps de compilation...

  8. #8
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Pas de "prefix header". pch signifie Pre-Compiled Headers. C'est une invention de Microsoft qui a des headers tellement monstrueux pour l'API Win32 qu'il a fallu inventer cette astuce pour réduire les temps de compilation...
    ça me rappelle la fameuse macro WIN32_LEAN_AND_MEAN.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Le problème majeur des headers Windows, c'est qu'il ne sont pas utilisables séparément.
    Par exemple, si tu cherches à inclure windef.h tout seul, il te pète une erreur dans winnt.h qu'il inclut...

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

Discussions similaires

  1. [AJAX] Accès fonctions déclarées dans page chargée par Ajax
    Par yagrasdemonde dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 04/02/2008, 15h33
  2. Réponses: 5
    Dernier message: 25/01/2008, 11h15
  3. Probleme sur un ensemble de type dans fonction
    Par jetgirl dans le forum Oracle
    Réponses: 4
    Dernier message: 19/02/2007, 13h04
  4. [C#] Recupérer et comparer un Type dans une fonction
    Par Rycku dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/02/2007, 19h30
  5. créer un type dans une fonction javascript
    Par amelhog dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/07/2005, 13h54

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