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 :

Two or more data types in declaration specifier


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Two or more data types in declaration specifier
    Bonjour,

    Je suis en train de créer un projet SDL et j'ai quelques problèmes. Voici mes fichiers sources :
    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
    /*
     const.h
    =========
     
    Created by: Bogoris
    Last modification: 2007/08/28
    */
     
    #ifndef DEF_CONST
    #define DEF_CONST
            #define BLOCK_SIZE // Size of a square block (pixels)
            #define NB_BLOCKS_X 30
            #define NB_BLOCKS_Y 25
            #define WINDOW_WIDTH BLOCK_SIZE * NB_BLOCKS_X // Must not exceed 640px
            #define WINDOW_HEIGH BLOCK_SIZE * NB_BLOCKS_Y // Must not exceed 480px
     
            /* Enum used to make our prog more speaky and to define files formats */
            enum
            {
                    VIDE           = ' ',
                    MUR            = '#',
                    SNAKE_LEFT     = 'L',
                    SNAKE_FORWARD  = 'F',
                    SNAKE_RIGHT    = 'R',
                    SNAKE_BACKWARD = 'B',
                    APPLE          = '$',
                    TAIL           = 'T',
                    SNAKE_START    = 'S'
            };
     
            enum
            {
                    TO_THE_TOP,
                    TO_THE_BOTTOM,
                    TO_THE_LEFT,
                    TO_THE_RIGHT
            };
    #endif
    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
    /*
     main.c
    =========
     
    Created by: Bogoris
    Last modification: 2007/09/16
    */
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
     
    int main()
    {
            int mustContinue = 1;
            SDL_Surface *screen = NULL, *menu = NULL;
            SDL_Rect menuPosition;
            SDL_Event event;
     
            if (SDL_Init(SDL_INIT_VIDEO) == -1)
                    {
                    fprintf(stderr, "SDL initialisation error.");
                    exit(EXIT_FAILURE);
            }
     
            screen = SDL_SetVideoMode(570, 475, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
            SDL_WM_SetCaption("Bogoris\' Snake", NULL);
            menu = IMG_Load("sprites/menu.png");
            menuPosition.x = 0;
            menuPosition.y = 0;
     
            while (mustContinue)
            {
                    SDL_WaitEvent(&event);
                    switch (event.type)
                    {
                            case SDL_QUIT:
                                    mustContinue = 0;
                                    break;
                            case SDL_KEYDOWN:
                                    switch(event.key.keysym.sym)
                                    {
                                            case SDLK_ESCAPE:
                                                    mustContinue = 0;
                                                    break;
                                            case SDLK_1:
                                                    // mustContinue = play(screen);
                                                    break;
                                            case SDLK_KP1:
                                                    // mustContinue = play(screen);
                                                    break;
                                            default:
                                                    break;
                                    }
                    }
     
                    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
                    SDL_BlitSurface(menu, NULL, screen, &menuPosition);
                    SDL_Flip(screen);
            }
     
            SDL_FreeSurface(menu);
            SDL_Quit(); // Arrêt de la SDL
     
            return EXIT_SUCCESS; // Fermeture du programme
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*
     play.h
    ========
     
    Created by: Bogoris
    Last modification: 2007/06/13
    */
     
    #ifndef DEF_PLAY
    #define DEF_PLAY
            int play (SDL_Surface *screen);
    #endif
    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
    /*
     Play.c
    ========
     
    Created by: Bogoris
    Last modification: 2007/06/13
    */
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include "const.h"
    #include "play.h"
     
    int play (SDL_Surface *screen)
    {
            int mustContinue = 2;
            SDL_Event event;
     
            printf("Function play\n");
     
            char lvlPath[] = "lvl/map_01.lvl.txt";
            char map[NB_BLOCKS_X][NB_BLOCKS_Y] = {0};
            // loadLevel(lvlPath, map);
     
            while (mustContinue == 2)
            {
                    SDL_WaitEvent(&event);
                    switch(event.type)
                    {
                            case SDL_QUIT:
                                    mustContinue = 0;
                                    break;
                            case SDL_KEYDOWN:
                                    switch(event.key.keysym.sym)
                                    {
                                            case SDLK_ESCAPE:
                                                    mustContinue = 1;
                                                    break;
                                            default:
                                                    break;
                                    }
                                    break;
                    }
     
                    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                    SDL_Flip(screen);
            }
     
            return mustContinue;
    }
    Et voilà les messages de construction :

    Construction du répertoire des sources du projet : Bogoris_Snake ...
    make
    gcc -DHAVE_CONFIG_H -I. -I.. -Wall -g -g -O2 -MT play.o -MD -MP -MF .deps/play.Tpo -c -o play.o play.c
    In file included from play.c:14:
    play.h:11: erreur: two or more data types in declaration specifiers
    play.h:11: erreur: two or more data types in declaration specifiers
    play.c:17: erreur: conflicting types for «play"
    play.h:11: erreur: previous declaration of «play" was here
    play.c: In function «play":
    play.c:24: attention : accolades manquantes autour de l'initialisation
    play.c:24: attention : (near initialization for «map[0]")
    play.c:24: attention : unused variable «map"
    play.c:23: attention : unused variable «lvlPath"
    make: *** [play.o] Erreur 1
    Terminé ... sur un échec
    Temps total utilisé : 0 secondes
    Merci d'avance.

  2. #2
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Salut,

    Si dans le prototype d'une fonction declarée dans un .h tu utilises un type défini par l'utilisateur, alors il te faut dans ce meme .h faire les inclusions d'headers définissant ces types. (en l'occurence les headers de la SDL)

    Exemple (zob.h) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #ifndef __ZOB_H
    #define __ZOB_H
     
    #include <stdio.h> /* pour FILE */
     
    void kikoo(FILE * f);
     
    #endif

  3. #3
    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 Gruik Voir le message
    Exemple (zob.h) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #ifndef __ZOB_H
    #define __ZOB_H
     
    #include <stdio.h> /* pour FILE */
     
    void kikoo(FILE * f);
     
    #endif
    Bonne pratique, mais je rappelle que les identificateurs commençant par _ sont réservés à l'implémentation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #ifndef H_ZOB
    #define H_ZOB
     
    #include <stdio.h> /* pour FILE */
     
    void kikoo(FILE * f);
     
    #endif
    (en l'occurences les headers de la STL)
    En en C, on parle pas de STL (Standard Template Library)... mais de SL (Standard Library) ou de RTL (Run-time library, surtout sous Windows...)

  4. #4
    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 Bogoris Voir le message
    Je suis en train de créer un projet SDL et j'ai quelques problèmes.<...>
    Pour éviter les problèmes identifiés par Gruik et que le compilateur te pousse à faire la correction tout de suite, il est recommandé que le header x.h d'un fichier source x.c soit inclus en premier. Ca fait le ménage !
    :
    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
    /*
     Play.c
    ========
     
    Created by: Bogoris
    Last modification: 2007/06/13
    */
     
    #include "play.h"
    #include "const.h"
     
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
     
    #include <stdio.h>
    #include <stdlib.h>
     
    <...>
    Certains headers vont se retrouver dans le .h.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Merci tout le monde, j'ai trouvé la solution, et surtout le problème. En fait j'avais oublié un point virgule derrière deux énumérations, je l'avais vu, je l'avais corrigé mais, vous l'aurez deviné, ce n'était pas mon seul problème. En effet, mon EDI est Anjuta, et je n'étais pas très familiarisé avec. Bref, il fallait mettre les fichiers .h dans un dossier include qui se à la racine du dossier de projet. Et mieux vaut les importer à partir de là, parce que sinon vous ne modifiez pas forcément les bon fichiers, et c'est ça la cause de tous vos maux.

    Personnellement, j'essayais à chaque fois de recréer de nouveaux projets avec les mêmes sources, et cela ne fonctionnait pas. Normal : après avoir ajouté le point-virgule à la fin de l'énumération, je récupérais à chaque fois les fichiers sans point-virgule après. Et l'absence de point-virgule après une énumération ou une structure est la cause de cette erreur.

  6. #6
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    En en C, on parle pas de STL (Standard Template Library)... mais de SL (Standard Library) ou de RTL (Run-time library, surtout sous Windows...)
    Oué, je me suis gourré

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/03/2011, 14h43
  2. Réponses: 5
    Dernier message: 17/02/2009, 14h07
  3. Réponses: 1
    Dernier message: 12/11/2007, 15h48
  4. datetime data type resulted in an out-of-range
    Par faamugol dans le forum ASP
    Réponses: 2
    Dernier message: 26/05/2004, 20h51
  5. [SQL Server] Error converting data type varchar...
    Par Sir Tengu dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 13/06/2003, 10h46

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