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 définition structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 19
    Par défaut problème définition structure
    Bonjour a tous ,
    je suis en train de travailler sur un projet d'une gestion d'un stock crée avec une liste chainée.
    le soucie est que lorsque je compile ,des messages d'erreurs s'affichent dans un fichier.h devant contenir les structures de mon projet ITEM,STOCKITEM
    le message d'erreur est "conflicting type for ITEM" merci de bien vouloir m'aiguiller vers la solution.

    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
     
    typedef struct
    {
    	int id;
    	char *name;
    	char *category;
    	float price;
    }ITEM;
     
     
     
    typedef struct
    {
    	ITEM *item;
    	int quantity;
    	char *expirationDate;
    }STOCKITEM;
     
    ITEM *buildItem (int id, char *name, char *category, float price);
    void printItem (ITEM *item);
     
    STOCKITEM *buildStockItem (ITEM *item, int quantity, char *expirationDate);
    void printStockItem (STOCKITEM *stockItem);

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Es-tu sûr qu'il n'y a pas déjà quelque part une définition de ITEM?
    Que se passe-t-il si tu donnes un autre nom à ta structure?
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 19
    Par défaut
    Non du tout la seule déclaration de ITEM et de STOCKITEM sont dans mon fichier data.h et si je change le nom il va m'afficher un message d'erreur pour la variable ITEM *item situer dans ma structure STOCKITEM si je change aussi celle ci il va retourner dans ma structure ou j'ai changé de nom et m'afficher le même problème.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,
    Tes structures sont des typedef vers des anonymes, ce qui peut poser un problème d'édition des liens.
    N'y a-t-il pas des inclusions multiples de ton fichier .h? Ou invesement, il manque peut-être des includes.

    Essaie avec :
    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
    #ifndef STOCKITEM_H
    #define STOCKITEM_H
     
    typedef struct ITEMtag
    {
    	int id;
    	char *name;
    	char *category;
    	float price;
    } ITEM;
     
    typedef struct STOCKITEMtag
    {
    	ITEM *item;
    	int quantity;
    	char *expirationDate;
    } STOCKITEM;
     
    ITEM *buildItem(int id, char *name, char *category, float price);
    void printItem(ITEM *item);
     
    STOCKITEM *buildStockItem( ITEM *item, int quantity, char *expirationDate);
    void printStockItem(STOCKITEM *stockItem);
    #endif

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 19
    Par défaut
    Merci je pense que le soucie venais des librairies je ne sais pas comment vous avez fait mais cela marche pourriez vous m'expliquez le #endif svp

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Le #ifndef permet ici d'empêcher d'inclure 2 fois le même fichier.
    La première fois, le fichier est lu et traité. Le #define a défini un symbole correspondant au fichier.
    La seconde fois, le #ifndef détecte que le symbole existe et évite de lire à nouveau les définitions du fichier jusqu'au #endif
    Ainsi le compilateur ne verra qu'une unique définition des données du fichier.
    En vertu du 'one definition rule', le fait de revoir une seconde définition qui serait une erreur est ainsi évité.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 19
    Par défaut
    merci a tous pour votre aide en tout cas
    j'ai un autre soucie qui est apparue dans mon main lorsque j'apelle une fonction loadstock qui retourne un stock un message d'erreur apparait en me disant undefined reference to 'loadstock'
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    // stock.c
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "stock.h"
     
    STOCK *newStock(int nbitem)// fonction mapile voir feuille
    {
        int i;
        STOCK* stock = (STOCK*)malloc(sizeof(STOCK));
        stock->nbitem = nbitem;
        stock->items = malloc(nbitem * sizeof(ITEM*));
        for(i = 0; i < nbitem; i++)
        {
            stock->items[i] = malloc(sizeof(ITEM*));
        }
        stock->size = 0;
        stock->first = malloc(sizeof(STOCKNODE));
        return stock;
    }
     
    char *lecture(FILE *fichier,char *buffer)
    {
        fgets(buffer,256,fichier);
        buffer[strlen(buffer)-1] = '\0';//pour nous débarasser du \n;
        fgets(buffer,256,fichier);//pour sauter une ligne
        return buffer;
    }
     
     
     
    STOCK *loadStock (char *path)
    {
        STOCK *monstock;
        int i=0,id;
        double price;
        int nbitem,quantity;
        FILE *fichier=NULL;
        fichier=fopen("stock.txt","a+");
        char *name=malloc(256*sizeof(char));
        char *category=malloc(256*sizeof(char));
        char *expirationDate=malloc(256*sizeof(char));
        char *chaine=malloc(256*sizeof(char));
        char *buffer=malloc(256*sizeof(char));
        fgets(chaine,256,fichier);
        chaine[strlen(chaine)-1] = '\0';//pour nous débarasser du \n;
        nbitem=atoi(chaine);
        while(i<nbitem)
        {
            category=lecture(fichier,buffer);
            printf("%s",category);
            name =lecture(fichier,buffer);
            printf("%s",name);
            price=atof(lecture(fichier,buffer));
            printf("%f\n",price);
            i++;
            monstock->items[i] = buildItem(i,name,category,price);
        }
        stockNode*currenTNode=monstock->first;
        fgets(buffer,256,fichier);//passe les deux lignes!
        fgets(buffer,256,fichier);
     
        while (!feof(fichier))
        {
     
            id = atoi(lecture(fichier,buffer));  // l'id
            quantity = atoi(lecture(fichier,buffer)); // la quantitée
            expirationDate =(lecture(fichier,buffer)); // la date d'expiration
            printf("%d\n",id);
            printf("%d\n",quantity);
            printf("%s\n",expirationDate);
     
            currentStockNode->item = buildStockItem(stock->items[id], quantity, expirationDate); // on fait pointer le champ item de notre node item vers un stockitem que l'on construit avec les données que l'on a lut ds le fichier
            stock->size ++;
     
            if(!feof(file))  // si on est pas en fin de fichier, on creer un nouveau stocknode vers lequel next pointera  et notre nouveau pointeur de travail deviendra le noeud novellement creer
            {
                currentNode->next = malloc(sizeof(STOCKNODE));
                currentNode = currentNode->next;
            }
            else  // sinon le next du dernier noeud est null;
                currentNode->next = NULL;
     
     
     
     
        }
     
        fclose(file);
        free(cursor);
     
        return stock;
    }


    et dans mon main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     	int main
     {
           STOCK *stock = loadStock ("stock.txt");
     
     
     
          return 0;
    };

Discussions similaires

  1. Problème de structures
    Par Zikas-r dans le forum C
    Réponses: 6
    Dernier message: 27/12/2006, 00h01
  2. problème définition alias
    Par julien.63 dans le forum Apache
    Réponses: 2
    Dernier message: 26/10/2006, 17h41
  3. Réponses: 16
    Dernier message: 21/08/2006, 14h12
  4. [Structures]Problème sur structures
    Par kendras dans le forum C++
    Réponses: 5
    Dernier message: 07/06/2006, 10h20
  5. [OCaml] Problème de structure/parser
    Par marv1 dans le forum Caml
    Réponses: 4
    Dernier message: 09/05/2005, 12h16

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