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 :

Problème dans la compilation d'un projet


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut Problème dans la compilation d'un projet
    Bonjour,
    Je travaille actuellement sur un projet dans lequel j'ai des erreur de compilation du type "unknown type name" , "assignment makes pointer from integer without a cast" ou "implicit declaration of function". Je croit que ceci est du a la maniere dont j'utilise mes difféent fichier. Mon projet ce compose d'un main.c dans lequel je fait appel au fonction de la sdl pour mon interface graphique. j'ai un fichier polynome.c dans lequel j'ai des fonctions qui crée des polynôme et les manipule. Ce fichier est associer a polynome.h dans lequel j'ai mes prototype de fonction présent dans mon .c ainsi que la déclaration de structure qui ont pour but de gérer la forme des polynôme sous la forme d'une liste chaîné. Je dispose d'un troisième .c nommé sdl_fonction.c dans lequel j'ai des fonction comme l'affichage de texte ou encore la récupération. Sont .h associé contient donc les prototype des fonction de mon sdl_fonction.c j'ai aussi mi dedans une structure que je nomme paramètre qui contient plusieurs variable sur différent paramètre que prend la sdl (nom des image utilisé, taille, position...).

    J'ai du loupé une étape dans la confection avec plusieurs fichier car je suis entrain d'adapté mon polynome.h pour qu'il fonctionne avec mon main et avoir un interface graphique représentant les différente chose faite avec. malgrés avoir mit les include dans de mes .h. Enfaîte, je croit que je fait des chose interdite, dans mon polynome .c, e tente d'utilisé des structure présente dans sdl_fonction.c, j'utilise également des fonction de sdl_fonction.c dns certaine fonction de mon polynome.c. Et dans mon main, je tente d'accéder à la structure polynome (ou plutot mon polynome sous forme de liste chainé).
    voici ce que m'a sortit la dernière compilation:
    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
    37
    38
    39
    40
    41
    42
     
    polynome.h:50:45: error: unknown type name ‘parametre’
     DevForm creationMonome(SDL_Surface *screen, parametre prog, int choix, DevForm PolyDev, int degre);
                                                 ^
    polynome.h:51:43: error: unknown type name ‘parametre’
     DevForm creationPoly(SDL_Surface *screen, parametre prog, int choix, DevForm PolyDev);
                                               ^
    sdl_example.c: In function ‘main’:
    sdl_example.c:95:2: warning: implicit declaration of function ‘creationPoly’ [-Wimplicit-function-declaration]
      Poly1.dev=creationPoly(screen, prog, choix, Poly1.dev);
      ^
    sdl_example.c:95:11: warning: assignment makes pointer from integer without a cast [enabled by default]
      Poly1.dev=creationPoly(screen, prog, choix, Poly1.dev);
               ^
    In file included from polynome.c:34:0:
    polynome.h:50:45: error: unknown type name ‘parametre’
     DevForm creationMonome(SDL_Surface *screen, parametre prog, int choix, DevForm PolyDev, int degre);
                                                 ^
    polynome.h:51:43: error: unknown type name ‘parametre’
     DevForm creationPoly(SDL_Surface *screen, parametre prog, int choix, DevForm PolyDev);
                                               ^
    polynome.c: In function ‘creationMonome’:
    polynome.c:47:2: warning: implicit declaration of function ‘SDL_LoadBPM’ [-Wimplicit-function-declaration]
      background=SDL_LoadBPM(prog.backgroundFile);
      ^
    polynome.c:47:12: warning: assignment makes pointer from integer without a cast [enabled by default]
      background=SDL_LoadBPM(prog.backgroundFile);
                ^
    polynome.c: In function ‘creationPoly’:
    polynome.c:107:12: error: request for member ‘SDL_LoadBPM’ in something not a structure or union
      background. SDL_LoadBPM(prog.backgroundFile);
                ^
    polynome.c:125:13: warning: assignment makes pointer from integer without a cast [enabled by default]
       background=SDL_LoadBPM(prog.backgroundFile);
                 ^
    In file included from sdl_fonction.c:8:0:
    polynome.h:50:45: error: unknown type name ‘parametre’
     DevForm creationMonome(SDL_Surface *screen, parametre prog, int choix, DevForm PolyDev, int degre);
                                                 ^
    polynome.h:51:43: error: unknown type name ‘parametre’
     DevForm creationPoly(SDL_Surface *screen, parametre prog, int choix, DevForm PolyDev);
                                               ^
    voici également le polynome.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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    #ifndef POLYNOME_H
    #define POLYNOME_H
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <string.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    #include "polynome.h"
    #include <complex.h>
    #include <math.h>
    #include <float.h>
     
    typedef struct developpee developpee;
    typedef struct factorisee factorisee;
    typedef struct polynome polynome;
     
    struct developpee{
    	double complex monome;
    	int deg;
    	struct developpee *prec;
    	struct developpee *next;
    };
    typedef developpee* DevForm;
     
     
    struct factorisee{
    	double complex racine;
    	struct developpee *prec;
    	struct factorisee *next;
    };
    typedef factorisee *FactForm;
     
    struct polynome{
    	DevForm dev;
    	FactForm fact;
    };
    typedef polynome *POLYNOME;
     
    //----------PROTOTYPE----------
    /*je fait intervenir les fonction de l'autre fichier uniquement pour la création, si cela pose problème, je peut déplacer ces fonction de création dans le même fichier qu'est mon main. 
    */ 
     
    DevForm creationMonome(SDL_Surface *screen, parametre prog, int choix, DevForm PolyDev, int degre);
    DevForm creationPoly(SDL_Surface *screen, parametre prog, int choix, DevForm PolyDev);
    void afficher(DevForm PolyDev,char source[]);
    DevForm additionPoly(DevForm PolyDev1, DevForm PolyDev2, DevForm PolyDev3);
    DevForm soustractionPoly(DevForm PolyDev1, DevForm PolyDev2, DevForm PolyDev3);
    void comparer(DevForm PolyDev1, DevForm PolyDev2, int numeroPoly1, int numeroPoly2);
    DevForm multiplicationPoly(DevForm PolyDev1, DevForm PolyDev2, DevForm PolyDev3);
    int taille(DevForm PolyDev);
    DevForm insertion(DevForm PolyDev, developpee* monome);
    double complex evaluationPoint(DevForm PolyDev, double complex z);
    void evaluationPointExe(DevForm PolyDev);
    DevForm derivee(DevForm PolyDev1, DevForm PolyDev2);
    DevForm primitive(DevForm PolyDev1, DevForm PolyDev2);
    void division(DevForm PolyDev1, DevForm PolyDev2, DevForm tab[], int *p_retour);
    void divisionPoly(DevForm PolyDev1, DevForm PolyDev2, DevForm tab[]);
    DevForm PGCDPoly(DevForm PolyDev1, DevForm PolyDev2, DevForm PolyDev3);
    DevForm conjugue(DevForm PolyDev1, DevForm PolyDev2);
    void extractionReelImag(DevForm PolyDev, char dest[]);
    DevForm compositionPoly(DevForm PolyDev1, DevForm PolyDev2, DevForm PolyDev3);
    DevForm supprimerDevMaillon(DevForm PolyDev);
    void supprimerDev(DevForm PolyDev);
    #endif
    et mon sdl_fonction.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
    34
    35
    36
    37
    38
    39
     
    #ifndef SDLFONCTION_H
    #define SDLFONCTION_H
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <string.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    #include "polynome.h"
    #include "sdl_fonction.h"
    #include <complex.h>
    #include <math.h>
    #include <float.h>
     
    typedef struct parametre parametre;
    /*toute les variable de cettestructure sont initialisé dans le main, elle aie ensuite passer en parametre de fonction pour certain truc. Si cette derniere pose soucis, je peut la retiré et m'éforcer de les déclarer a chaque fois, j'avais fait cela pour économisé de la place et du temp*/
    struct parametre{
    	int width;
    	int height;
    	char tableauFile[30];
    	char chenFile[30];
    	char boxFile[30];
    	char backgroundFile[30];
    	int policeTableau;
    	int policeTexte;
    	SDL_Rect positionFond;
    	SDL_Rect positionChen;
    	SDL_Rect positionBox;
    	SDL_Rect positionBackground;
    };
     
    //----------PROTOTYPE----------
    int ask(SDL_Surface *screen, SDL_Rect* offset, const char * question, unsigned int maxAnswerSize, char answer[maxAnswerSize], int taille, char police[], int red, int green, int blue);
    int show(SDL_Surface *screen, SDL_Rect* offset, const char * message, int delay_in_ms, int taille, char police[], int red, int green, int blue);
    void start(SDL_Surface *screen, parametre prog);
     
    #endif
    Pour ce qui est de mon main, il me permet d'initialisé sdl, de créer mon interface, et de saisir un event au niveau des touche du clavier. Différente touches seront utilisé qui impliqueront différente action sur les polynôme (création, addition...)
    cela pourra peut être vous éclaircir sur l'architecture d mon projet, et ce qu'il fait.
    je voudrais donc avoir un peut d'aide afin de remanier tout ces fichier pour que mon projet puisse compilé. Sachant que mes fonction de manipulation ne pose pas de problème, je les ai tous testé, dans le terminal. Enfaîte les problème ont commencer lorsque j'ai débuté la création de l'interface graphique avec sdl.

    merci d'avance de l'aide que vous m’apporter car la je suis pas mal perdu avec la gestion de mes fichier

  2. #2
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 581
    Points : 1 995
    Points
    1 995
    Par défaut
    bonsoir ,votre fichier sdl_fonction.h n'ai pas inclut dans polynôme?

  3. #3
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 303
    Points : 4 967
    Points
    4 967
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Pour commencer parametre n'est pas un type défini. Il te faut soit ajouter le mot clef struct avant parametre, soit définir avec un typedef un nom qui va englober la définition struct parametre.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Bonjour

    En dehors des oublis de ".h", il est d'usage de nommer ses structures "s_xxx" et ses types "t_xxx". Ca facilite la lecture et l'écolutivité du code.
    De plus, les noms en majuscules sont réservés aus macros. Et surtout cacher une étoile derrière un type est une très très mauvaise idée.

  5. #5
    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
    Si on extrait des fichiers .h ce qui semble signifiant pour la question, on a:

    Dans polynome.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "polynome.h"
    typedef struct developpee developpee;
    typedef struct factorisee factorisee;
    typedef struct polynome polynome;
    typedef developpee* DevForm;
    typedef factorisee *FactForm;
    typedef polynome *POLYNOME;
    1- Pourquoi inclure polynome.h dans lui-même ?
    2- Le type "parametre" utilisé dans les prototypes des fonctions est non défini. Il faut par contre inclure le .h comportant cette définition : sdl_fonction.h

    Dans sdl_fonction.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "polynome.h"
    #include "sdl_fonction.h"
    typedef struct parametre parametre;
    1- A quoi sert l'autoinclusion de sdl_fonction.h ?
    2- A quoi sert l'inclusion de polynome.h dont aucune des définitions ne sont utilisées par sdl_fonction.h ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sdl_example.c:95:2: warning: implicit declaration of function ‘creationPoly’ [-Wimplicit-function-declaration]
      Poly1.dev=creationPoly(screen, prog, choix, Poly1.dev);
      ^
    sdl_example.c:95:11: warning: assignment makes pointer from integer without a cast [enabled by default]
      Poly1.dev=creationPoly(screen, prog, choix, Poly1.dev);
    Ce genre de couple de diagnostics indique le manque du prototype de la fonction. Inclure le .h comportant la définition de la fonction (ici creationPoly()) .

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Alors merci a vous tous.
    Pour ce qui est de paramètre c'est un type que j'avais définis dans sdl_fonction.h
    Je cache une étoile derrière un type dans mon utilisation de liste chaîné, c'es comme cela que je l'ai appris à la fois en cours et sur les cours d'internet. J'en ai par contre définis un qui est sans intérêt, typedef polynome *POLYNOME; Polynôme étant une structure contenant deux liste chaîné (une pour la forme développé et une pour la forme factorisé) je n'avais pas besoins de définir POLYNOME car je ne l'utilise jamais dans mon code. J'ai donc suprimer cette déclaration de type.
    J'ai corrigé mes différent problème d'inclusion je n'ai donc plus de warning comme j'avais au départ. J'ai cependant de nouveau warning, que je ne parviens pas à résoudre.
    polynome.c: In function ‘creationMonome’:
    polynome.c:47:2: warning: implicit declaration of function ‘SDL_LoadBPM’ [-Wimplicit-function-declaration]
    background=SDL_LoadBPM(prog.backgroundFile);
    ^
    polynome.c:47:12: warning: assignment makes pointer from integer without a cast [enabled by default]
    background=SDL_LoadBPM(prog.backgroundFile);
    ^
    polynome.c: In function ‘creationPoly’:
    polynome.c:107:12: warning: assignment makes pointer from integer without a cast [enabled by default]
    background=SDL_LoadBPM(prog.backgroundFile);
    ^
    /tmp/ccRrGzME.o: dans la fonction « creationMonome »:
    /home/romain/Bureau/projet info/projet/src/polynome.c:47: référence indéfinie vers « SDL_LoadBPM »
    /tmp/ccRrGzME.o: dans la fonction « creationPoly »:
    /home/romain/Bureau/projet info/projet/src/polynome.c:107: référence indéfinie vers « SDL_LoadBPM »
    Je ne comprend pas pourquoi, la déclaration de SDL_LoadBPM ne serait pas bonne alors que j'ai bien inclut les SDL/SDL.h dans polynome.c
    De même pour le second type d'erreur, j'ai bien déclarer background grace à SDL_Surface *background.

    voici le début de création monôme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DevForm creationMonome(SDL_Surface *screen, parametre prog, int choix, DevForm PolyDev, int degre){
    	double Re, Im;
    	SDL_Rect offset;
    	SDL_Surface *background=NULL;
    	char message[100];
    	char question[100];
    	char answer[10];
    	background=SDL_LoadBPM(prog.backgroundFile);
    	SDL_BlitSurface(background, NULL, screen, &prog.positionBackground);
            SDL_Flip(screen);
    Et la le début de creationPoly
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DevForm creationPoly(SDL_Surface *screen, parametre prog, int choix, DevForm PolyDev){
    	int degre, compteur;
    	SDL_Surface *background=NULL;
    	SDL_Rect offset;
    	char message[30];
    	char question[30];
    	char answer[10];
    	background=SDL_LoadBPM(prog.backgroundFile);
    	SDL_BlitSurface(background, NULL, screen, &prog.positionBackground);
            SDL_Flip(screen);
    Je ne vois pas ou est le problème, surtout que dans mon main.c je déclare et utilise de la même manière mon background pareil pour mon sdl_fonction.c et je ne rencontre pas ce problème, tous se passe correctement. Je ne comprend pas ce problème avec SDL_LoadBPM . d'ailleur si je retire ceci, mon programe fonctionne mais cela implique que je ne peut pas réactualiser le fond de mon interface donc les écriture des question ont se supperpossé.

    Si cela peut aider je vous met aussi ma ligne de compilation
    gcc -Wall -Wextra -O1 -Wuninitialized -g main.c polynome.c sdl_fonction.c -lSDL -lSDL_image -lSDL_ttf -o main

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    La bonne fonction est SDL_LoadBMP pour lire le format de fichier du même nom .bmp.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    C'est juste une petite faute de frappe de ma par, ce n'est pas SDL_LoadBPM qu'il faut metre mais SDL_LoadBMP
    Ces correction on donc l'aire de fonctionner.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Je n'avais pas vue que tu venais de me corrigé Winjerome, je venais également de m'en rendre compte mais je n'avais pas réactualiser ma page pour voire des réponse.
    Merci a toi tout de même

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/01/2014, 21h02
  2. Problème dans la compilation d'un projet
    Par king_soft dans le forum Visual Studio
    Réponses: 10
    Dernier message: 02/02/2011, 18h54
  3. Problème dans la compilation des classes
    Par info_systeme dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 13/09/2009, 21h25
  4. Problème dans la compilation (JasperCompileManager)
    Par zakjo_developper dans le forum Jasper
    Réponses: 1
    Dernier message: 04/04/2007, 18h42
  5. Problème a la compilation d'un projet Qt
    Par _LVEB_ dans le forum Qt
    Réponses: 9
    Dernier message: 24/03/2007, 17h53

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