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 :

Probleme erreur : undefined reference to 'fonction'


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Probleme erreur : undefined reference to 'fonction'
    Bonjour,
    J'ai un problème d'erreur sur mon programme sur Codeblocks

    J'ai essayé de réinstaller Codeblocks mais ça ne marche pas.
    À la ligne 9, ça me met « undefined reference to 'intervalle' » et ça à chaque fonction.

    Merci d'avance.


    C:\Users\linar\OneDrive\Bureau\TP4\main.c|9|undefined reference to `intervalle'|
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include "TP4.h"
     
     
    void exo1(){
    int res;
     
    res=intervalle(5,10);
    printf("Le nombre est dans l'intervalle ");
    }
     
     
     
    void exo2(){
        int res;
        int a=3,b=4;
        res=somme(a,b);
        somme_bis(a,b,&res);
        printf("%d", res);
    }
     
    void exo4()
    {
        int* mon_tab;
        int taille=10;
       // mon_tab=create_array(taille);
        create_array_bis(&mon_tab, taille);
        fill_array(mon_tab,taille);
        disp_array(mon_tab,taille);
    }
     
     
    int main(){
     
     
    int hey;
        do {
        printf("Numero de l'exo : ");
        scanf("%d",&hey);
        switch(hey){
        case 1 : exo1();
        break;
        case 2 : exo2();
        break;
        case 4 : exo4();
        break;
     
     
        default : printf("Error ...\nFinish");
     
     
    }
    }while (hey=0);
    return 0;
     
     
        }
    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
    #include "TP4.h"
     
    int intervalle(int a, int b)
    {
        int r,val;
        do
        {
           printf("Saisir une nouvelle val");
           fflush(stdin);
           r=scanf("%d",&val);
        } while(r==0 || val<a || val>b);
        return val;
    }
     
    int somme(int x1, int x2){
     
        return x1+x2;
    }
     
    void somme_bis(int x1, int x2, int* res){
     
    *res=x1+x2;
    }
     
    int* create_array(int size)
    {
        int* tab;
        tab = (int*)malloc(size *sizeof(int));
        return tab;
    }
     
     
     
    void fill_array(int *A, int nb)
    {
        int i;
        for(i=0; i<nb; i++)
        {
            A[i]=2*i+3;
        }
    }
     
     
     
    void disp_array(int *A, int nb)
    {
        int i;
        for(i=0; i<nb; i++)
        {
            printf("%d ", A[i]);
        }
    }
     
     
     
    void create_array_bis(int **A, int size)
    {
        *A=(int*)malloc(size *sizeof(int));
    }
    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 TP4_H_INCLUDED
    #define TP4_H_INCLUDED
     
    int intervalle(int a, int b);
     
    int somme(int x1, int x2);
     
    void somme_bis(int x1, int x2, int *res);
     
    void create_array_bis(int **A, int size);
     
    void disp_array(int *A, int nb);
     
    void fill_array(int *A, int nb);
     
    int* create_array(int size);
     
    #endif // TP4_H_INCLUDED

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Il faut déclarer les fonctions libres dans les .h avec le mot-clé extern.
    Il faut aussi et surtout que le fichier d'implémentations soit compilé et lié.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Recherche, Comprendre, apprendre et encore recherche !
    Inscrit en
    Janvier 2019
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Recherche, Comprendre, apprendre et encore recherche !

    Informations forums :
    Inscription : Janvier 2019
    Messages : 38
    Points : 27
    Points
    27
    Par défaut
    Où tu peux aussi rajouter ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #ifdef __cplusplus
    extern "C" {
    #endif
    T'es déclaration
    #ifdef __cplusplus
    }
    #endif

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci mais sa ne marche pas et comment je peux declarer les .h avec extern?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Rien à voir avec extern .

    C'est un problème (assez courant sous Code::Blocks) de fichier qui n'est pas compilé et lié. Cf. ce sujet de FAQ.

    À voir également : Pourquoi ne faut-il pas utiliser fflush(stdin) pour vider le buffer clavier ?

    Et pense à libérer avec free() la mémoire que tu alloues avec malloc().

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci maintenant, ça me met ça :

    -------------- Build: Debug in TP4 (compiler: GNU GCC Compiler)---------------

    mingw32-g++.exe -o bin\Debug\TP4.exe obj\Debug\main.o obj\Debug\TP4.o TP4.h.gch
    TP4.h.gch: file not recognized: File format not recognized
    collect2.exe: error: ld returned 1 exit status
    Process terminated with status 1 (0 minute(s), 0 second(s))
    1 error(s), 0 warning(s) (0 minute(s), 0 second(s))

  7. #7
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Citation Envoyé par 914765212 Voir le message
    merci maintenant sa me met sa :
    Avant de rentrer dans les détails, est-il normal de compiler un fichier avec l'extension suivante h.gch?.
    Et pensez-vous que le linker puisse avoir l'intelligence suffisante de compiler un fichier dont t'il ne reconnaît pas l'extension ? cela pourrait expliquer pourquoi vous obtenez un message d'erreurs: "TP4.h.gch: file not recognized: File format not recognized".
    À l'avenir, il faut lire les avertissements ou les erreurs que le compilateur affiche.

    À bientôt.
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

  8. #8
    Invité
    Invité(e)
    Par défaut
    Tu es allé un peu trop loin dans l'application de ce qui est dit dans le sujet de FAQ : tu ne dois cocher les cases « compile file » et « link file » que sur les fichiers sources (.c), pas sur les fichiers d'entête (.h).

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Mars 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    OMG c'est bon ! Ça marche !!

    Merci Winjerome.

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

Discussions similaires

  1. [XL-2013] fonction name.name probleme erreur 1004
    Par FGTH40 dans le forum Excel
    Réponses: 4
    Dernier message: 31/12/2013, 09h56
  2. [XL-2010] Erreur "Circular reference" dans fonction
    Par yzf-r dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/10/2013, 14h17
  3. [WM18] probleme erreur fonction VersPressePapier à partir d'une image
    Par nico78 dans le forum Windev Mobile
    Réponses: 6
    Dernier message: 26/08/2013, 21h03
  4. Problème avec les touches CTRL & FONCTIONS
    Par bidule999 dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 03/12/2004, 09h52
  5. Probleme de pointeur sur une fonction
    Par nicky78 dans le forum C
    Réponses: 2
    Dernier message: 23/05/2004, 20h26

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