Symboles "->" non reconnu en C, (linux)
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Symboles "->" non reconnu en C, (linux)



  1. #1
    invited9a6e272

    Symboles "->" non reconnu en C, (linux)


    ------

    Bonjour,


    j'ai un petit soucis pour réviser le C...

    Je travail sur linux et lorsque je souhaite compiler mon programme, la flèche n'est pas reconnu pour aller dans ma structure...

    p->carte= e; // ne fonctionne pas
    (*p).carte =e; //fonctionne...

    Une idée ?

    En vous remerciant.

    -----

  2. #2
    pm42

    Re : Symboles "->" non reconnu en C, (linux)

    Nous donner le message d'erreur, le programme et la ligne utilisée pour compiler aiderait.

  3. #3
    invited9a6e272

    Re : Symboles "->" non reconnu en C, (linux)

    Pour le message d'erreur : " error : invalid type argument of "->" (have 'Liste') "
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include "carte.h"
    
    struct maillon{
    	CARTE carte;
    	struct maillon *suiv;
    };
    typedef struct maillon Liste;
    
    Liste creer_liste(void)
    {
    	return NULL;
    }
    int est_vide(Liste L)
    {
    	return (!L);
    }
    void visualiser_liste(Liste L)
    {
    	Liste p;
    	for(p=L;!est_vide(p);p=p->suiv)       // Erreur sur cette ligne 
    	{
    		affiche(p->carte);                     //Et sur celle ci 
    	}
    }
    j'utilise un makefile pour compiler que voici :

    CFLAGS=-c -g
    LDFLAGS=

    test_liste0: test_liste0.o liste.o carte.o
    gcc -o $@ $^ $(LDFLAGS)

    test_liste1: test_liste1.o liste.o carte.o
    gcc -o $@ $^ $(LDFLAGS)

    test_liste2: test_liste2.o liste.o carte.o
    gcc -o $@ $^ $(LDFLAGS)

    %.o: %.c
    gcc $(CFLAGS) $<



    Voilà =)
    ( le fichier.c est invalide lors de l'envoi)
    Dernière modification par Jack ; 14/02/2016 à 20h34. Motif: Ajout balises code

  4. #4
    pm42

    Re : Symboles "->" non reconnu en C, (linux)

    Vu que p est de type Liste et pas Liste*, utiliser -> dessus a peu de chances de fonctionner en effet.

  5. A voir en vidéo sur Futura
  6. #5
    invited9a6e272

    Re : Symboles "->" non reconnu en C, (linux)

    mais dans ce cas pourquoi (*p).carte=e fonctionne ?

  7. #6
    pm42

    Re : Symboles "->" non reconnu en C, (linux)

    Citation Envoyé par jerome0 Voir le message
    mais dans ce cas pourquoi (*p).carte=e fonctionne ?
    Vu que dans le code que tu donnes en exemple, on n'a jamais p->carte = e, c'est difficile à dire...

  8. #7
    invited9a6e272

    Re : Symboles "->" non reconnu en C, (linux)

    oups oui c'est sûr...

    e est de type carte. et carte est une structure contenant 3 valeurs.
    mais même au niveau de l'erreur écrite ici, lorsque je met


    for(p=L;!est_vide(p);p=(*p).su iv)
    // Au lieu de

    for(p=L;!est_vide(p);p=p->suiv)
    // ça fonctionne

    je ne comprend pas puisque c'est censé être la même chose...
    est-il possible qu'il manque quelque chose dans une bibliothèque ?

  9. #8
    pm42

    Re : Symboles "->" non reconnu en C, (linux)

    Ton code ne compile pas chez moi, il manque carte.h notamment donc je ne peux pas vérifier.
    Mais il n'y a pas de raison en soi pour que (*p). compile et pas p->

    La 1ère des choses serait d'écrire ton code avec des pointeurs et pas des valeurs ou le contraire.

  10. #9
    Chanur

    Re : Symboles "->" non reconnu en C, (linux)

    Je plussoie.
    *p ne devrait pas fonctionner puisque p n'est pas un pointeur.

    Au passage je te recommande de mettre un niveau de warning plus élevé : personnellement j'utilise l'option -Wall : ça signale beaucoup de warnings qui sont en fait des erreurs
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  11. #10
    invited9a6e272

    Re : Symboles "->" non reconnu en C, (linux)

    Bonjour,

    J'ai finalement trouvé d'où venais le problème... En fait vous l'avez dit, p n'est pas un pointeur. J'ai mal déclaré la structure Liste et lors de la redéfinition du type, j'avais écrit

    typedef struct maillon Liste;

    alors qu'il fallait

    typedef struct maillon *Liste;

    par contre pour (*p) qui fonctionnait... mystère.
    Merci pour votre aide =)

Discussions similaires

  1. VB mettre le micro en mode " ecoute" "veille" et "stop" sous visual basic
    Par mattlander dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 14/12/2015, 12h45
  2. Il est erroné d'utiliser les symboles "1" et "0" dans une table de vérité.
    Par invite00710587 dans le forum Epistémologie et Logique (archives)
    Réponses: 27
    Dernier message: 22/08/2013, 07h21