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 :

[C::B-Linux] Erreur bizzare


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut [C::B-Linux] Erreur bizzare
    Bonjour,

    Un truc qui me gonfle, j'ai une erreur trés zarb regardez:
    fonctions.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
    15
    #include "module.h"
     
    void Sort_Table (CHAR tab [MAX_CHAR]){
       int  count1,
            count2;
       CHAR tmp;
     
         for (count1 = 0; count1 < MAX_CHAR; count1++)
           for (count2 = 0; count2 < (MAX_CHAR-1); count2++)
             if (tab[count2].occur > tab[(count2+1)].occur){
                tmp = tab[count2];
                tab[count2] = tab[(count2+1)];
                tab[(count2+1)] = tmp;
                 }
        }
    le type CHAR:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct{
     
       unsigned char   car;
       int           occur;
        }CHAR;
    dans fonctions.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Sort_Table (CHAR tab[MAX_CHAR]);
    et le compilo me signal une erreur dans foncions.h
    erreur: expected ')' before 'tab'
    ???
    Merci
    Compil your life guy!
    The Aures Project

  2. #2
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut Re: [C::B-Linux] Erreur bizzare
    Citation Envoyé par Goundy
    et le compilo me signal une erreur dans foncions.h
    erreur: expected ')' before 'tab'

    Effectivement, d'où peut provenir cette erreur ???
    Encore un grand mystère de l'informatique.

    Tu es sur que c'est sur cette partie de code ?
    Le compilo ne donne pas de numéro de ligne ?

  3. #3
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut
    Yes, ligne 1 dans le fichier fonctions.h
    Compil your life guy!
    The Aures Project

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: [C::B-Linux] Erreur bizzare
    Citation Envoyé par Goundy
    le type CHAR:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct{
     
       unsigned char   car;
       int           occur;
        }CHAR;
    dans fonctions.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Sort_Table (CHAR tab[MAX_CHAR]);
    et le compilo me signal une erreur dans foncions.h
    erreur: expected ')' before 'tab'
    Est-ce que CHAR est bien défini avant usage ?

  5. #5
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut Re: [C::B-Linux] Erreur bizzare
    Citation Envoyé par Goundy
    le type CHAR:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct{
     
       unsigned char   car;
       int           occur;
        }CHAR;
    dans module.h
    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
    #ifndef H_MODULE
    #define H_MODULE
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include "fonctions.h"
     
    #define DONE          0
    #define MAX_CHAR     255
     
    typedef struct {
     
       unsigned char   car;
       int           occur;
        }CHAR;
     
    #endif
    Compil your life guy!
    The Aures Project

  6. #6
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut Re: [C::B-Linux] Erreur bizzare
    Citation Envoyé par Emmanuel Delahaye
    Est-ce que CHAR est bien défini avant usage ?
    Je ne vois pas comment:

    Question:
    Citation Envoyé par niglo
    Effectivement, d'où peut provenir cette erreur ???
    Encore un grand mystère de l'informatique.
    Réponse:
    Citation Envoyé par Goundy
    Yes, ligne 1 dans le fichier fonctions.h

  7. #7
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut Re: [C::B-Linux] Erreur bizzare
    NON!
    Question:
    Citation Envoyé par niglo
    Tu es sur que c'est sur cette partie de code ?
    Le compilo ne donne pas de numéro de ligne ?
    Réponse
    Citation Envoyé par Goundy
    Yes, ligne 1 dans le fichier fonctions.h
    Compil your life guy!
    The Aures Project

  8. #8
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Attention, tu inclus fonctions.h dans module.h, alors que fonctions.h a besoin de connaitre la définition de CHAR !! Faudrait pas plutôt déclaré CHAR directement dans fonctions.h ???

    Ca ne pourrait pas venir de la ?

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: [C::B-Linux] Erreur bizzare
    Citation Envoyé par Goundy
    Citation Envoyé par Goundy
    le type CHAR:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct{
     
       unsigned char   car;
       int           occur;
        }CHAR;
    dans module.h
    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
    #ifndef H_MODULE
    #define H_MODULE
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include "fonctions.h"
     
    #define DONE          0
    #define MAX_CHAR     255
     
    typedef struct {
     
       unsigned char   car;
       int           occur;
        }CHAR;
     
    #endif
    Donc, il est défini après ! Il faut cesser de bricoler et commencer à travailler avec méthode.

    La regle de conception est simple :

    Un header doit être 'autonome'. Tout ce qu'il utilise doit avoir été défini avant, soit par définition directe, soit par inclusion. Ni plus ni moins.
    Ici, je conseille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef H_MODULE
    #define H_MODULE
     
    #define DONE  0
     
    #endif
    Ce header séparé est-il vraiment utile ?
    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
     
    #ifndef H_FONCTIONS
    #define H_FONCTIONS
     
    #define MAX_CHAR     255
     
    typedef struct 
    {
       unsigned char   car;
       int occur;
    }
    CHAR;
     
    void Sort_Table (CHAR tab[MAX_CHAR]);
    #endif /* guard */
    J'ai quand même passé du temps à expliquer tout ça sur mon site, c'est un peu dommage de ne pas suivre les conseils qui y sont données...

    http://emmanuel-delahaye.developpez....ganiser_source
    http://emmanuel-delahaye.developpez.....htm#organiser

    et ne me dit pas que c'est une découverrte, depuis le temps que tu postes ici...

    Je rappelle que les headers ne sont pas là pour 'faciliter le codage' en incluant des choses qu'on veut cacher, mais pour fournir l'exact interface nécessaire à l'utilisation des fonctions et objets publics.


    Ici, on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Sort_Table (CHAR tab[MAX_CHAR]);
    donc, on doit avoir la définition de CHAR et celle de MAX_CHAR.

    En général, se sont précisément ces définitions communes qui font que des fonctions vont naturellement se regrouper dans des headers et modules spécialisés. Il y a tout simplement un 'lien organique' entre elles, qui est le type. Les fonctions vont tout simplememnt manipuler des objets de type CHAR. Il serait donc naturel que le header (et le fichier d'implémentation correspondant) s'appelle char.h / char.c.

    Pour une approche sytématique :

    http://emmanuel-delahaye.developpez.com/tad.htm

  10. #10
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut Re: [C::B-Linux] Erreur bizzare
    Citation Envoyé par Goundy
    NON!
    Question:
    Citation Envoyé par niglo
    Tu es sur que c'est sur cette partie de code ?
    Le compilo ne donne pas de numéro de ligne ?
    Réponse
    Citation Envoyé par Goundy
    Yes, ligne 1 dans le fichier fonctions.h
    C'est guère mieux, finalement ton fichier fonctions.h ressemble à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void Sort_Table (CHAR tab[MAX_CHAR]);
    Comment veux-tu que dans le fichier fonctions.h, le compilateur connaisse le type CHAR?

    Comme Emmanuel a dit dans un autre post:
    (ici)
    Un header doit être 'autonome'. Il doit contenir/inclure tout ce qu'il lui est nécessaire. Ni plus, ni moins.
    Donc il faut changer ta façon de faire tes .h...

    Jc

  11. #11
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Il faut faire attention aux header.
    Tu as un module.h qui, apparemment, definis le type CHAR (module.h, c'est pas super transparent comme non).
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef H_MODULE
    #define H_MODULE
     
    #define DONE                  0
    #define MAX_CHAR     255
     
    typedef struct 
    {
       unsigned char   car;
       int           occur;
    } CHAR; 
    #endif
    Tu inclues cet header dans tous les sources et headers qui ont besoin du type CHAR.
    Notamment dans fonctions.h (ou functions.h). module.h est un 'header de base'. Il n'a rien a inclure.

  12. #12
    Membre chevronné Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Par défaut
    Citation Envoyé par niglo
    Attention, tu inclus fonctions.h dans module.h, alors que fonctions.h a besoin de connaitre la définition de CHAR !! Faudrait pas plutôt déclaré CHAR directement dans fonctions.h ???

    Ca ne pourrait pas venir de la ?
    D'après ce que dis tout le monde (en expliquant bien mieux que moi ), l'erreur vient effectivement de là. Désolé de ne pas expliquer aussi bien que les autres, je ne suis pas encore un gourou du C ni de dvp

  13. #13
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par niglo
    D'après ce que dis tout le monde (en expliquant bien mieux que moi ), l'erreur vient effectivement de là. Désolé de ne pas expliquer aussi bien que les autres, je ne suis pas encore un gourou du C ni de dvp
    Moi non plus

  14. #14
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut
    Merci à tous lol, j'ai toujours du mal à séparer mes fichiers :o
    Merci normalement j'ai compris maintenant
    Compil your life guy!
    The Aures Project

  15. #15
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Goundy
    Merci à tous lol, j'ai toujours du mal à séparer mes fichiers :o
    Merci normalement j'ai compris maintenant
    C'est pourtant très simple et très logique :

    "Définir avant d'utiliser."

  16. #16
    Membre très actif Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Par défaut
    Oui oui surement, mais en fait c'est la façon de découper moi j'avais une autre logique en tête enfin bref maintenant j'ai les idées plus claires
    Thanks.
    Compil your life guy!
    The Aures Project

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Goundy
    en fait c'est la façon de découper moi j'avais une autre logique en tête
    Pas la bonne visiblement...

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

Discussions similaires

  1. [mono] Compilation sous linux, erreur dans windows
    Par AlexandreP dans le forum Mono
    Réponses: 6
    Dernier message: 18/08/2006, 19h56
  2. 8i sur Linux : Erreur loadin shared object file
    Par NGONGO ETABA dans le forum Oracle
    Réponses: 2
    Dernier message: 24/03/2006, 11h40
  3. [ 3.1 ] [ Linux ] Erreur au démarrage
    Par lr dans le forum Eclipse Java
    Réponses: 14
    Dernier message: 28/09/2005, 23h18
  4. Question facile, erreur bizzare lors d'un Left, Top
    Par SpiderAlpha dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2004, 12h56
  5. Réponses: 4
    Dernier message: 27/08/2003, 21h34

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