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 de type de pointeur


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 2
    Points : 5
    Points
    5
    Par défaut Problème de type de pointeur
    Bonjour, tout d'abord, voici 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
    37
    38
    39
    typedef struct //Struct Token
    {
    	int color;
    	int shape;
    } Token;
     
    enum {ROUGE, VERT, BLEU, JAUNE, NB_SHAPE};
    enum {CERCLE, CARRE, TRIANGLE, DIAMANT, NB_COLOR};
     
    typedef struct PlayedToken //Struct PlayedToken
    {
    	Token *jeton;
    	struct playedToken* next;
    	struct playedToken* nextColor;
    	struct playedToken* prevColor;
    	struct playedToken* nextForm;
    	struct playedToken* prevForm;
    } PlayedToken;
     
    typedef struct //Struct TokenList
    {
    	int length;
    	PlayedToken* head;
    	PlayedToken* tail;
    	PlayedToken* head_color[NB_COLOR];
    	PlayedToken* head_shape[NB_SHAPE];
    } TokenList;
     
     
    int addPlayedTokenHead(TokenList *tokenlist, Token *token)
    {
        PlayedToken *tmp;
        if ((PlayedToken *)malloc(sizeof(PlayedToken)) == NULL) return -1;
        tmp->jeton = token;
        tmp->next = tokenlist->head;
        tokenlist->head = tmp;
        tokenlist->length++;
        return 0;
    }
    En compilant, j'obtient:
    main.c:35:15: error: assignment from incompatible pointer type [-Werror]
    tmp->next = tokenlist->head;


    Pourtant, les 2 pointeurs sont de type PlayedToken*.

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Bonjour et bienvenue,

    C'est subtil mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct PlayedToken //Struct PlayedToken
    {
    	Token *jeton;
    	struct playedToken* next;
    	struct playedToken* nextColor;
    	struct playedToken* prevColor;
    	struct playedToken* nextForm;
    	struct playedToken* prevForm;
    } PlayedToken;

    Le C est sensible à la casse : « struct playedToken » et « struct PlayedToken » ne sont pas les mêmes expressions. Et comme tu utilises d'emblée un pointeur, le C te laisse faire une déclaration partielle même s'il ne connaît pas encore le détail de « struct playedToken » avec une minuscule.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Bonjour et bienvenue,

    C'est subtil mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct PlayedToken //Struct PlayedToken
    {
    	Token *jeton;
    	struct playedToken* next;
    	struct playedToken* nextColor;
    	struct playedToken* prevColor;
    	struct playedToken* nextForm;
    	struct playedToken* prevForm;
    } PlayedToken;

    Le C est sensible à la casse : « struct playedToken » et « struct PlayedToken » ne sont pas les mêmes expressions. Et comme tu utilises d'emblée un pointeur, le C te laisse faire une déclaration partielle même s'il ne connaît pas encore le détail de « struct playedToken » avec une minuscule.
    1 jour que je galère pour une erreur aussi bête je comprends pas comment j'ai fait pour la raté.

    Grand merci Obsidian !

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par S3d1n Voir le message
    1 jour que je galère pour une erreur aussi bête je comprends pas comment j'ai fait pour la raté.
    C'est le lot de tous les programmeurs. Tu viens de « déverrouiller » tes premiers gallons, comme on dit chez les gamers. :-) Ou à tout le moins, tu l'aurais fait si tu débutais en programmation, ce dont tu n'as pas l'air…

    Surtout que cette erreur n'est pas si bête qu'elle en a l'air. Non seulement il faut être sensibilisé à ces notions de casse mais le compilateur ne déclenche pas d'erreur non plus sur la cause initiale puisque l'expression reste valide.

    Grand merci Obsidian !
    À ton service.

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

Discussions similaires

  1. C++ Problème de fonctions et pointeurs
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 01/10/2005, 16h20
  2. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  3. Problème de type chaîne
    Par champijulie dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 12/05/2005, 20h23
  4. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  5. [Sybase] Problème de type sous ASE
    Par Hotchotte dans le forum Sybase
    Réponses: 1
    Dernier message: 18/12/2004, 11h04

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