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


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Par défaut erreur conflit de type
    bonjour,
    lors de la compilation j'ai un problème, je vous donne 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
     
    int main(int ac, char **av)
    {
       char *str;
       str = test_name[av(2)];
    }
     
    char *test_name(char *s)
    {
       int   c;
       int   test;
       char  *str;
     
       test = 0;
       c = 0;
       while (s[c] != '\0')
        {
          if (s[c] = '/')
            test = 1;
          c++;
        }
      if (test = 1)
        {
          c = strlen(s);
          while (s[c] != '/')
            c--;
          while (s[c] != '\0')
            str[test] = s[c];
          c++;
          return (str);                           
    } 
    else
        return (s);               
    }
    et quand je compile j'ai un message d'erreur "
    - error : conflicting types for 'test_name'
    - error : previous implicit declaration of 'test_name' was here

    je ne voit pas de quoi ca vient. merci

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str = test_name[av(2)];
    test_name est-il un tableau ? Où est-il défini ? N'y a t-il pas confusion avec la fonction ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str = test_name(av(2));
    Dans ce cas, il faut que la fonction test_name soit déclarée AVANT, soit en déplaçant la fonction soit en plaçant son prototype avant le main.

    La fonction test_name est fausse et va planter ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       char  *str;
    ....
            str[test] = s[c];
    str est un pointeur non initialisé et pas un tableau.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Par défaut
    oui test_name est bien une fonction, j'ai bien mit des parenthèse dans mon prog, c'est juste une erreur de recopie^^

    non av[c] est un parametre donné en entrée de programme, ce paramétre est un nom de fichier, et ma fonction sert a tester si le av[c] est un nom de fichier ou un lien.

  4. #4
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Comme le dit diogene il faut que ta fonction soit déclarée avant sont appel.
    Sinon tu devrais avoir 2 warning :
    *) Implicit declaration of function XXX
    *) Conflicting types for XXX
    Où XXX est le nom de ta fonction.

    Par défaut si la fonction n'est pas déclarée avant son appel le type de retour est de type int, et comme toi tu veux retourner un char* il y a un problème
    Donc soit tu mets le prototype de ta fonction au début de ton fichier, soit tu mets ta fonction avant son appel (donc avant le main dans ton cas).

    Attention aussi, tu confonds = et ==, le premier est fait pour l'affectation et le second pour la comparaison

    Et puis même remarque que diogene sur le fait que tu utilises un pointeur non initialisé.
    De plus ce pointeur n'est «vivant» que dans ta fonction donc dès que tu sera sorti de ta fonction il sera supprimé. Il faut que tu utilises l'allocation dynamique

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 34
    Par défaut
    c'est bon, j'ai fait un fichier h ou j'ai prototypé mes fonctions et ca marche.
    merci

Discussions similaires

  1. [MySQL] Erreurs multiples de type Undefined index
    Par alleramiens dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 27/01/2006, 20h39
  2. Erreur de conflit de type
    Par Jhulk dans le forum C
    Réponses: 15
    Dernier message: 16/01/2006, 15h47
  3. [erreur] Backend message type 0x44 arrived while idle
    Par shwin dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 28/11/2005, 16h29
  4. Erreur utilisation de type indéfini
    Par hanane_iaai dans le forum C++
    Réponses: 3
    Dernier message: 04/07/2005, 17h34
  5. [Htaccess] Gérer les erreurs HTTP du type 404...
    Par Marshall_Mathers dans le forum Apache
    Réponses: 4
    Dernier message: 01/07/2004, 10h29

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