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 :

Undefined reference to :


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Undefined reference to :
    Bonjour, je travaille actuellement sur CodeBlocks, j'essaie de spliter un code que j'avais déjà créer auparavant.
    J'ai pour cela plusieurs classes, et j'ai instancié l'une d'entre elles pour accéder a une de ses méthodes.
    Cependant, lors du build du programme, le logiciel me retourne une erreur que je n'arrive pas à résoudre :

    Nom : Screenshot from 2016-10-12 17-05-43.png
Affichages : 124
Taille : 3,5 Ko

    Voici le 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    #include <iostream>
    #include <math.h>
    #include <vector>
    #include <fstream>
    #include "Methods.h"
    #include <Calculateur.h>
     
    using namespace std;
     
    int main()
    {
        int numberP;
        double Delta_X;
        int time;
        double BC1;
        double BC2;
        int i;
        Methods M;
        Calculateur C;
     
     
        cout << "Give the number of points you want ? "<< "\n";
        cin >> numberP;
        cout << "Choisissez le temps : " << "\n";
        cin >> time;
        cout << "Choisissez le Delta_X : " << " \n";
        cin >> Delta_X;
        cout << "Give boundary conditions : " << "\n";
        cout << "left hand side : ";
        cin >> BC1;
        cout << "Right hand side : ";
        cin >> BC2;
     
        C.sign(-4.5);
     
        for (i =0 ; i<numberP; i++)
        {
           cout << M.ExplicitUpwind(BC1,BC2,numberP,Delta_X,time)[i] <<"\n";
        }
     
        return 0;
    }
    Merci d'avance !

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    L'éditeur de lien n'a pas trouvé l'implémentation de la méthode spécifiée. Le fichier .cpp qui contient cette définition n'a probablement pas été inclus au sein du projet.


    Copie-colle les messages texte comme du texte, ne fais pas de captures d'écran :

    • c'est plus rapide pour toi ;
    • ça permet l'indexation du message en vue d'une recherche sur le forum ;
    • ça bouffe moins de cycles CPU, moins de bande passante et donc moins d'énergie.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Merci pour les conseils .
    Cependant, j'avais créer ces classes au sein même de mon projet, je les ai tout de même de nouveau ajoutées, et le résultat est toujours le même. Il n'arrive pas a me faire le lien avec la classe...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    La déclaration et l'implémentation de la méthode qui pose problème, SVP.

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    Comme Mat_Houston l'a si bien dit, c'est une erreur qui survient parce que l'éditeur de liens ne trouve pas l'implémentation (il aurait pu parler du code binaire exécutable) correspondant à la fonction recherchée.

    Cela nous permet déjà de tirer quelques conclusions :
    1. Comme le compilateur n'a pas râlé lors de la compilation, c'est qu'il connaissait la fonction avec tous les paramètres qu'elle requière.
    2. --> la déclaration de cette fonction (au niveau du fichier .h / .hpp) est donc correcte
    3. comme c'est l'éditeur de liens qui râle, c'est que, pour une raison à déterminer, le compilateur n'a pas généré le code binaire exécutable pour cette fonction.

    1. Il y a plusieurs situations dans lesquelles cela peut arriver :
    2. tu as oublié de définir le code de cette fonction au niveau d'une unité de compilation (dans un *.cpp)
    3. l'unité de compilation (le fichier .cpp) qui contient l'implémentation n'a pas été compilé (peut être parce qu'il n'a pas été correctement ajouté au projet)
    4. la fonction est une fonction template et tu as placé l'implémentation de cette fonction dans une unité de compilation (fichier *.cpp), alors que le compilateur en a besoin chaque fois qu'il arrive à déterminer le type de tous les paramètres template

    Etant donné que tu es sous Code::Blocks, je pencherais volontiers pour la deuxième solution dans le cas présent, car c'est effectivement un problème relativement récurrent avec ceux qui débutent en utilisant cet EDI.

    Le fait est que Code::Blocks n'ajoute pas forcément les fichiers que tu crées de manière automatique, et qu'il y a souvent une étape à laquelle il te demande si tu veux ajouter le fichier que tu crée au projet ou non. Pour notre malheur, cette étape considère que la "bonne réponse par défaut" est... non, alors que l'on aurait sans doute préféré que ce soit "oui".

    Tu dois donc aller voir dans les propriétés du projet et t'assurer que tous les fichiers qui en font partie sont bel et bien pris en compte. Une fois cette étape franchie, tu devrait arriver à compiler ton projet sans aucun problème
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Alternativement si la méthode est qualifiée inline (c'est la mention des contraintes sur les templates par koala01 qui m'y fait penser), il convient de placer sa définition dans l'en-tête.

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    Alternativement si la méthode est qualifiée inline (c'est la mention des contraintes sur les templates par koala01 qui m'y fait penser), il convient de placer sa définition dans l'en-tête.
    ... ou de la placer dans un fichier dont l'extension est totalement libre, pour autant qu'elle ne risque pas d'entrer en conflit avec une extension "utilisée habituellement pour autre chose" (par exemple .inl) qui serait inclu à la fin du fichier d'en-tête.

    Cette technique est régulièrement utilisée pour arriver à garder la séparation entre la déclaration et l'implémentation et donc garder des fichiers "aussi petits que possibles"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Merci pour toutes ces réponses et le temps que vous avez accorder a mon problème. Cependant cela venait de ma déclaration des méthodes dans mon header j'avais mal placé le Methods :: ....
    Désolé pour le dérangement !

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

Discussions similaires

  1. Problème de classe
    Par DeusXL dans le forum DirectX
    Réponses: 15
    Dernier message: 04/12/2005, 14h37
  2. Problème de classe
    Par tidou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/10/2005, 17h49
  3. [FLASH MX2004] Problème de classe
    Par JulPoWeR dans le forum Flash
    Réponses: 1
    Dernier message: 10/07/2005, 22h51
  4. [ERREUR] Ne retrouve pas la classe main
    Par Anathema dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 06/07/2005, 16h16
  5. [template et linker]problème dans le main
    Par Andu dans le forum C++
    Réponses: 19
    Dernier message: 27/06/2005, 17h47

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