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 :

Erreur : "Deferencing pointer to incomplete type"


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Erreur : "Deferencing pointer to incomplete type"
    Bonjour, j'apprend actuellement le C et Je rencontre un problème lorsque je souhaite colorer une fenêtre d'une couleur, lors de la compilation j'ai l'erreur : "error: dereferencing pointer to incomplete type" à la ligne 22, comment la résoudre ?

    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
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL.h>
     
    void pause();
     
    int main(int argc, char *argv[])
    {
        SDL_Init(SDL_INIT_VIDEO);
     
      SDL_Window *screen = NULL;
     
      screen = SDL_CreateWindow(
                         "Test",
                         SDL_WINDOWPOS_CENTERED,
                         SDL_WINDOWPOS_CENTERED,
                         640,
                         480,
                         SDL_WINDOW_OPENGL
    );
     
    SDL_FillRect (screen, NULL, SDL_MapRGB(screen->format, 17, 206, 112));
    SDL_Flip(screen);
     
    if (screen == NULL)
    {
        fprintf(stderr, "Impossible de charger le mode vidéo : %s\n",SDL_GetError());
        exit(EXIT_FAILURE);
    }
     
     
    pause();
     
        SDL_Quit();
     
        return EXIT_SUCCESS;
    }
    Merci.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    La structure SDL_Window est déclarée mais pas définie. Regarde s'il y a un fichier d'en-tête qui la définit complètement, ou s'il y a des fonctions GetFormat() pour récupérer ce que tu cherches...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Invité
    Invité(e)
    Par défaut
    SDL_Window * est un pointeur opaque et il n'est pas possible d'accéder directement aux membres de la structure vers laquelle il pointe; ce que tu fais dans l'appel à SDL_MapRGB() avec screen->format.

    Un pointeur opaque est un pointeur dont on ne connait pas le type de donnée qu'il contient. La structure vers lequel il pointe est définie dans un fichier source et seul ce fichier source a donc accès à ces données. Pour utiliser une telle structure, une "forward declaration" est faite dans un header; on déclare uniquement la structure ainsi que des fonctions qui vont permettre de la manipuler.

    Un exemple simpliste :

    window.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct window;
     
    struct window * CreateWindow(void);
    int GetWindowHeight(struct window * w);
    window.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
    struct window
    {
        int height;
        int width;
    };
    struct window * CreateWindow(void)
    {
        struct window * w = malloc(sizeof(*w));
        return w;
    }
    int GetWindowHeight(struct window * w)
    {
        return w->height;
    }
    Je ne connais pas très bien la SDL mais le retour de SDL_GetWindowPixelFormat semble être ce que tu dois passer à SDL_MapRGB().

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci, pour vos éclaircissement, j'ai finalement réussi à changer la couleur de ma fenêtre en utilisant ce code : https://wiki.libsdl.org/SDL_RenderPresent , ça fonctionne parfaitement.

Discussions similaires

  1. error: dereferencing pointer to incomplete type
    Par rufa11 dans le forum Réseau
    Réponses: 2
    Dernier message: 11/02/2015, 09h41
  2. error: dereferencing pointer to incomplete type
    Par Amnael dans le forum Débuter
    Réponses: 15
    Dernier message: 16/03/2014, 23h26
  3. dereferencing pointer to incomplete type
    Par Almenor dans le forum Débuter
    Réponses: 10
    Dernier message: 31/05/2012, 10h17
  4. dereferencing pointer to incomplete type
    Par Anasiben dans le forum Débuter
    Réponses: 3
    Dernier message: 19/05/2011, 16h39
  5. dereferencing pointer to incomplete type
    Par Newgaia dans le forum Débuter
    Réponses: 2
    Dernier message: 19/04/2009, 19h00

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